标题: 一个关于多态的问题 [打印本页] 作者: 黑锅 时间: 2015-11-18 13:10 标题: 一个关于多态的问题 class A{
public String s(D d){
return ("A and D");
}
public String s(A a){
return ("A and A");
}
}
class B extends A{
public String s(B b){
return ("B and B");
}
public String s(A a){
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(a2.s(b));
System.out.println(a2.s(c));
System.out.println(a2.s(d));
}
}
求解 为什么结果是
B and A
B and A
A and D作者: yqlbd 时间: 2015-11-18 16:36
A a2=new B() 这句话把子类对象发送给父类应用,这样a2 里面能用的方法为 s(D d) 和s(A a),其中s(A a)被B类中的方法覆盖了,实际返回[B+A ], a2.s(b)和a2.s(c)中参数都继承自A类,只能发送给s(A a),所以返回[B+A ]。作者: 黑锅 时间: 2015-11-22 10:28
明白了 谢谢。