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{}
public class MoreDemo{
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));
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));
}
}
为什么打印结果是
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
求解释,谢谢!
主要是后6个不好理解啊
追答CD都继承B 但是CD没有自己的方法 虽然都是new的自己 但是方法确实B类的 B类中多了重载了一个方法 重写了一个A类的方法
System.out.println(a2.show(b));
a2 new的是B 虽然它定义的是A 但是在JVM运行时会变成B B里面有这个方法
System.out.println(a2.show(b)); 第四行的输出是错的吧?应该是B and B啊 怎么会是B and A?
反正你理解继承关系的时候 遵循一点,调用子类的方法 子类没有的找父类,子类父类都有的那是重写,用子类的。参数父子类之间可以转换的
后6个不懂,前三个好理解