一个多态经典案例

来源:互联网 发布:剑桥大学生活费 知乎 编辑:程序博客网 时间:2024/06/17 06:51

1.先上概念:

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

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

就是编译看左边,运行看右边。

2.多态的匹配:

  1. 确保参数完全匹配O的前提下,依次匹配this与super
  2. 考虑参数用super(O)渐近匹配O,依次匹配this与super
  3. 存在子类覆盖父类方法时,根据new子类实例的原则,先调子类方法

3.动态绑定(了解即可):

方法调用和方法体在运行时刻的连接就称之为动态绑定(dynamic binding)

动态绑定,它意味着绑定在运行期间进行,以对象的类型为基础。动态绑定也叫做“后期绑定”或“运行期绑定”。
若一种语言实现后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。不同的语言对后期绑定的实现方法是有所区别的。但我们至少可以这样认为:它们都要在对象中安插某些特殊类型的信息

Java中绑定的所有方法都采用后期绑定技术,除非一个方法已被声明成final。这意味着我们通常不必决定是否应进行后期绑定——它是自动发生的

//A相当于爷爷类,B相当于父亲类,B继承A//C,D相当于儿子类,都继承Bclass A {public String show(D obj){          return ("A and D");     }      public String show(A obj){           return ("A and A");     } }class B extends A {public String show(B obj) {return ("B and B");}public String show(A obj) {return ("B and A");}}class C extends B{}class D extends B{}public class Test {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 ASystem.out.println(a1.show(c)); // ② A and ASystem.out.println(a1.show(d)); // ③ A and DSystem.out.println(a2.show(b)); // ④ B and ASystem.out.println(a2.show(c)); // ⑤ B and ASystem.out.println(a2.show(d)); // ⑥ A and DSystem.out.println(b.show(b));  // ⑦ B and BSystem.out.println(b.show(c));  // ⑧ B and BSystem.out.println(b.show(d));  // ⑨ A and D}} 

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 海顺新材股票 新顺之钢铁世纪 克里斯韦伯 陈新颖 新颖 新颖班名 新颖地摊货 赵新颖 新颖的店名 杨新颖 新颖的意思 王新颖 新颖的标题 新颖的名字 吴新颖 新颖演讲稿 新颖的团队名字 新颖的作文题目 新颖作文题目 新颖的自我介绍 新颖自我介绍 寝室文化节新颖主题 新颖的活动策划 新颖的创业项目 新颖的宣传方式 新颖电子产品 新颖什么意思 新颖的演讲稿 新颖别致的意思 关于感恩的新颖题目 新颖的作文题材 运动会开幕式新颖入场 军训16字口号新颖 运动会解说词50字新颖 运动会班级入场词新颖 班级介绍词50字新颖 2019宝宝小名时尚新颖别致 运动会入场方阵新颖 在蛋糕上写什么字新颖 运动会入场解说词新颖 新风领地 新风