public class A {
public String Show(D obj) {
return "A and D";
}
public String Show(A obj) {
return "A and A";
}
}
public class B extends A{
public String Show(Object obj) {
return "B and B";
}
public String Show(A obj) {
return "B and A";
}
}
public class C extends B{
}
public class C 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("1---"+a1.Show(b));
System.out.println("2---"+a1.Show(c));
System.out.println("3---"+a1.Show(d));
System.out.println("4----"+a2.Show(b));
System.out.println("5----"+a2.Show(c));
System.out.println("6----"+a2.Show(d));
System.out.println("7---"+b.Show(b));
System.out.println("8---"+b.Show(c));
System.out.println("9---"+b.Show(d));
}
}
结果:
原因
对于前三个来说是属于父类的引用指向子类的对象,所以还是会调用相应A里面的方法
参数是b,B继承A,调用方法Show(A obj)
2---A and A:参数是c,C继承B,B继承A,调用方法Show(A obj)
3---A and D:参数是d,调用方法Show(D obj)
4----B and A:参数是b,B继承A,调用方法Show(A obj)
5----B and A:参数是c,C继承B,B继承A,调用方法Show(A obj)
6----A and D:参数是d,D继承B,B继承A,调用方法Show(D obj)
7---B and A:参数是b,B继承A,调用方法Show(A obj)
8---B and A:参数是c,C继承B,B继承A,调用方法Show(A obj)
9---A and D:参数是b,B继承A,调用方法Show(D obj)



