多态详解(1)
来源:互联网 发布:广发华福软件 编辑:程序博客网 时间:2024/04/30 10:13
看到过的一些东西,自己总结如下:如有错误之处,请指出!
- class 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...{}
二)问题:以下输出结果是什么?
(三)答案
① A and A
② A and A
③ A and D
④ B and A
⑤ B and A
⑥ A and D
⑦ B and B
⑧ B and B
⑨ A and D
要理解这些问题:一定要记得:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。
也就是说必须满足:
1.存在方法覆盖(字段不会覆盖,子类会保存父类字段的拷贝,可以参考:多态详解(2))
2.父类引用指向子类对象
3.最终调用哪个方法是由你new出来的对象决定的,即调用你new出来的对象中覆盖的父类的方法
比如a2.show(b),传递进来的是B的对象,为什么不返回B and B呢?因为没有覆盖,A类中并没有这个方法,这是子类的方法,然后就会查找父类即A类中有没有对象B做参数的方法,还没有,就在B中查找参数为A父类的方法,所以返回为B and A
即查找顺序为:this.show(Type param)、super.show(Type param)、this.show((superType) param)、super.show((superType )param)。
再比如第9个,B类没有,在A类中找到了,所以打出A and D
以上只是个人对文章的理解,表达可能不清楚,可以参看http://developer.51cto.com/art/200906/130414.htm
- 多态详解(1)
- 多态详解(2)
- 151220DuoTaiDemo多态详解1
- c++--多态详解
- C++多态详解
- C++多态详解
- java多态详解
- OC多态详解
- 多态详解
- 多态详解
- 多态详解
- 继承多态详解
- Java 多态详解
- 多态详解
- 多态详解
- JAVA多态详解
- java多态详解
- java多态详解
- 为什么软件开发大都不招女生
- 12-2-28关于一些指针的盘点
- DBUnit的使用之單元測試類的配置
- HDU 1863
- 数学 hnu 12256 Rabbit Playing Game
- 多态详解(1)
- jsp tag file中使用c:when 标签无法正确判断的问题
- 终于发布成功了,截图表示庆祝
- PHP运行出现Notice : Use of undefined constant 的完美解决方案
- 06、C获取当前系统日期时间
- jboss remote debug 设置
- LINQ 学习笔记(04)
- 解决IE不能打开新的窗口
- 堆栈溢出的预防方法