明白这些之后,再来理解这题就很简单了
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(D obj){ //这是继承A父类的 show(D obj)方法
return ("A and D");
}
public String show(B obj){ //这是子类B特有的方法,父类A中没有
return ("B and B");
}
public String show(A obj){ //因为方法名和show(A obj)参数列表相同,这是复写父类B的show(A obj)方法,
return ("B and A");
}
}
class C extends B{
public String show(D obj){ //这是继承父类B的 show(D obj)方法
return ("A and D");
}
public String show(B obj){
return ("B and B");
}
public String show(A obj){
return ("B and A");
}
class D extends B{
public String show(D obj){ //这是继承父类B的 show(D obj)方法
return ("A and D");
}
public String show(B obj){ //这是继承父类B的 方法
return ("B and B");
}
public String show(A obj){ //这是继承父类B的 方法
return ("B and A");
}
class DynamicTest
{
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));
}
} |