大家好,今天看到java多态:就一个问题有些搞不清楚:“动态绑定”网上看到一道题:(一)相关类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 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)); ①
System.out.println(a1.show(c)); ②
System.out.println(a1.show(d)); ③
System.out.println(a2.show(b)); ④
System.out.println(a2.show(c)); ⑤
System.out.println(a2.show(d)); ⑥
System.out.println(b.show(b)); ⑦
System.out.println(b.show(c)); ⑧
System.out.println(b.show(d)); ⑨ (本文来自CSDN博客,http://blog.csdn.net/thinkGhoster/archive/2008/04/19/2307001.aspx) 这里感谢原创作者(三)答案 ① 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我对本题的4,5搞不清楚,按照理论确实应该是这个答案,可是我的结果:
①A and A
②A and A
③A and D
④A and A
⑤A and A
⑥A and D
⑦B and B
⑧B and B
⑨A and D希望大家多多参与,分数可以再加!
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 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)); ①
System.out.println(a1.show(c)); ②
System.out.println(a1.show(d)); ③
System.out.println(a2.show(b)); ④
System.out.println(a2.show(c)); ⑤
System.out.println(a2.show(d)); ⑥
System.out.println(b.show(b)); ⑦
System.out.println(b.show(c)); ⑧
System.out.println(b.show(d)); ⑨ (本文来自CSDN博客,http://blog.csdn.net/thinkGhoster/archive/2008/04/19/2307001.aspx) 这里感谢原创作者(三)答案 ① 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我对本题的4,5搞不清楚,按照理论确实应该是这个答案,可是我的结果:
①A and A
②A and A
③A and D
④A and A
⑤A and A
⑥A and D
⑦B and B
⑧B and B
⑨A and D希望大家多多参与,分数可以再加!
解决方案 »
- 经常用java的用什么编程啊
- 对象引用跟字符串之间不得不说的故事!~
- 比较连个字符串或字符完全相等的问题···菜鸟在线等待中。。。
- 请教Socket.connect(SocketAddress endpoint, int timeout) 的问题
- 急需高手帮忙,刚刚还好的突然就不行急死我了.
- 21天学通java的课后习题在那个网站
- 谢谢帮我看看,怎么解决这个问题
- JAVA里有没有像VB中那样的DoEvents语句来实现不让系统占用太多CPU资源。
- servlet 同 applet 通讯问题
- 请问如何做文件上传?急呀!来就有分!
- 释放swt中GC对象出错,不知何原因。请高手指教!
- 是不是应该用throws声明一下?
head first
然而
比如④,a2.show(b),a2是一个引用变量,类型为A,则this为a2,b是B的一个实例,于是它到类A里面找show(B obj)方法,没有找到,于是到A的super(超类)找,而A没有超类,因此转到第三优先级this.show((super)O),
为什么这里要把(super)o呢,看不懂,而不是show(o)?
有个优先级的
貌似是固定的
好了,先温习到这里,言归正传!实际上这里涉及方法调用的优先问题 ,优先级由高到低依次为:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。
所以问题就“这样”解决了
确实有问题,可是我在eclipse上执行就是我的这个结果。难道eclipse有问题?
博客中的优先级是“主人”自己总结的,我也不明白为什么会那样,
感谢兄弟回答
A a=new B()
首先调用子类的B的方法,如果B中无对应方法就执行父类的方法,已测试
然后show里面的参数问题的话
show(c)
b和c则先找他对应的最高级父类类型的参数(Object 类型除外,试过 的)
他们你的最高级父类是A
那就是B AND A了
A a2 = new B(); ?
是的话
再怎么执行也会先调用B里面对应的方法
子类方法能把父类方法覆盖掉的
关于这位兄弟所说个人认为应该直接就到B里面找show方法,而不应该从A里面找,因为现在这个引用看不到A,只看得到B里面的方法