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 Test1 {
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)); // A and A
System.out.println("2--" + a1.show(c)); //A and A
System.out.println("3--" + a1.show(d)); //A and D
System.out.println("4--" + a2.show(b)); // B and A
System.out.println("5--" + a2.show(c));// B and A
System.out.println("6--" + a2.show(d));// A and D
System.out.println("7--" + b.show(b)); // B and B
System.out.println("8--" + b.show(c));// B and B
System.out.println("9--" + b.show(d)); // A and D
System.out.println("10--" + c.show(d)); // A and D
}
}
首先记住一个方法调用的优先级:
this.show(obj)、super.show(obj)、this.show((super)obj)、super.show((super)obj)
第一个a1.show(b),A中自己没用show(B b)方法,A也没有父类,所以需要找B的父类---->A,调用show(A a)方法
第四个a2.show(b),A中自己没用show(B b)方法,A也没有父类,所以需要找B的父类---->A,a2引用的是B对象,B覆盖了A的方法,所以调用B类的show(A a)方法
其他的就都能解决了~