java--------动态的经典例题

多态一:

什么是动态:

同一行为的多种不同表达,或者同一行为的多种不同实现就叫做多态。

1)Person,Student,Teacher之间的关系

2)有一个“车”的父类,宝马继承自车,奔驰继承自车。那么反过来,车可以是宝马,也可以是奔驰,具有不同的形态,这种现象就叫多态。  如,我要上街买个东西,请你给我一辆车,这时你传给我的车(一个Car对象,形参)的一个实例(实参)就是多态(可以有不同的实现,宝马、奔驰、自行车等都可以)。

3) “笔”是父类,钢笔、铅笔、圆珠笔都是子类。这时,如果请你给我一支笔,你可以给任意一支笔。

运行规则:

方法覆盖后出现的运行时多态,其运行规则是:编译时看数据类型,运行时看实际的对象类型(new谁调谁)。

多态二:

匹配原则:

先: 确保参数完全匹配O的前提下,依次匹配this与super。

再: 考虑参数用super(O)渐近匹配O,依次匹配this与super

当: 存在子类覆盖父类方法时,根据new子类实例的原则,先调子类方法。

匹配顺序:

this.show( O )    super.show( O )                         this.show( super(O) )    super.show( super(O) )

多态经典例题:

<span style="font-size:18px;">匹配顺序: this.show(O),  super.show(O),
                        this.show(super(O)), super.show(super(O))
1)先确保参数完全匹配O的前提下,依次匹配this与super。
2)再考虑参数用super(O)渐近匹配O,依次匹配this与super
3)当存在子类覆盖父类方法时,根据new子类实例的原则,先调子类方法。

public class TestDT{
  public static void main(String args[]){
       A a1 = new A();
       A a2 = new B();
        B b = new B();
        C c = new C();
        D d = new D();
        System.out.println(a1.show(b)); //  ①  A and A
        System.out.println(a1.show(c)); //  ②  A and A
        System.out.println(a1.show(d)); //  ③  A and D
        System.out.println(a2.show(b)); //  ④  B and A
        System.out.println(a2.show(c)); //  ⑤  B and A
        System.out.println(a2.show(d)); //  ⑥  A and D
        System.out.println(b.show(b));  //  ⑦  B and B
        System.out.println(b.show(c));  //  ⑧  B and B
        System.out.println(b.show(d));  //  ⑨  A and D
  }</span>
}

版权声明:本文为博主原创文章,未经博主允许不得转载。希望大家多指教指教

时间: 2024-11-07 12:21:14

java--------动态的经典例题的相关文章

Java动态代理的理解

代理可分为两类: 静态代理和动态代理 1.静态代理: /*定义一个业务接口*/ public interface Count { // 查看账户方法 public void queryCount(); // 修改账户方法 public void updateCount(); } /*定义一个委托类,实现该业务接口*/ public class CountImpl implements Count { @Override public void queryCount() { System.out.

java动态代理技术

主要用来做方法的增强.让你能够在不改动源代码的情况下,增强一些方法,在方法运行前后做不论什么你想做的事情(甚至根本不去运行这种方法).由于在InvocationHandler的invoke方法中,你能够直接获取正在调用方法相应的Method对象.详细应用的话.比方能够加入调用日志,做事务控制等. 另一个有趣的作用是能够用作远程调用,比方如今有Java接口,这个接口的实现部署在其他server上,在编写client代码的时候,没办法直接调用接口方法,由于接口是不能直接生成对象的,这个时候就能够考虑

数据库与信息系统经典例题

数据库与信息系统经典例题 @阆苑祁寒 更新时间:2020-01-03 此版本是最终版本. 经典例题取自<数据库与信息系统>课程,仅供学术交流和期末复习,如有错误请指出,转载时请注明出处! 一.基础概念核查(填空) 用户创建数据库时,其主要数据文件的初始大小必须不小于_______系统数据库的大小. 关系数据模型由关系_______.______和_________三部分组成. 设有某个文件,当向其中插入一条新记录时,首先读文件头,找到最末磁盘块的地址后将最末磁盘块读入内存缓冲区,在缓冲区内将新

理解java动态代理

java动态代理是java语言的一项高级特性.在平时的项目开发中,可能很难遇到动态代理的案例.但是动态代理在很多框架中起着不可替代的作用,例如Spring的AOP.今天我们就聊一聊java动态代理的实现原理. jdk对于动态代理的支持主要依赖于两个类:Proxy和InvocationHandler.我们先看一下类图. Subject类是主题类,定义了我要做什么.我们需要代理的类即实现Subject接口的RealSubject. 1.InvocationHandler InvocationHand

java动态代理的实现

动态代理作为代理模式的一种扩展形式,广泛应用于框架(尤其是基于AOP的框架)的设计与开发,本文将通过实例来讲解Java动态代理的实现过程. 友情提示:本文略有难度,读者需具备代理模式相关基础知识,. 通常情况下,代理模式中的每一个代理类在编译之后都会生成一个class文件,代理类所实现的接口和所代理的方法都被固定,这种代理被称之为静态代理(Static Proxy).那么有没有一种机制能够让系统在运行时动态创建代理类?答案就是本文将要介绍的动态代理(Dynamic Proxy).动态代理是一种较

java动态代理机制

首先了解代理设计模式,其思想是为其他对象提供一种代理以控制对这个对象的访问. java动态代理就是遵循这种思想,spring中的AOP实现原理就是java的动态代理. 在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface).另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的. 每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler,当我们通

java动态代理

要想了解Java动态代理,首先要了解什么叫做代理,熟悉设计模式的朋友一定知道在Gof总结的23种设计模式中,有一种叫做代理(Proxy)的对象结构型模式,动态代理中的代理,指的就是这种设计模式. 在我看来所谓的代理模式,和23种设计模式中的"装饰模式"是一个东西.23种设计模式中将它们作为两种模式,网上也有些文章讲这两种模式的异同,从细节来看,确实可以人为地区分这两种模式,但是抽象到一定高度后,我认为这两种模式是完全一样的.因此学会了代理模式,也就同时掌握了装饰模式. 代理模式 代理模

java 动态代理示例,带主要注释

Java proxy是基于反射,仅仅支持基于接口的动态代理. java 动态代理是一切架构的基础,必须了解. 废话少说,先上代码获得感性认识. 示例代码有主要注释. 接口: public interface Subject { String hello(String name); void say();} 接口实现: public class ImpSubject implements Subject { @Override public String hello(String name){ r

java动态代理原理及解析

代理:设计模式 代理模式是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个真实对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 通过代理层这一中间层,有效的控制对于真实委托类对象的直接访问,同时可以实现自定义的控制策略(Spring的AOP机制),设计上获得更大的灵活性. java动态代理的类和接口(jdk1.6源码) 1,java.lang.reflect.Proxy:动态代理机制的主类,提供一组静态方法为一组接口动态的生成对