码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-11-06 11:20:42      阅读:254      评论:0      收藏:0      [点我收藏+]

标签: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>
}
技术分享

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

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

标签:java   多态   

原文地址:http://blog.csdn.net/yangxin_blog/article/details/49679081

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!