public class Testduotai {
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));
}
}
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{}
a1所拥有的函数只有A类中的方法
故前三个的结果为
A and A
A and A
A and D
a2由于是指向B类的引用
且B类中的第二个show函数对A中第二个函数进行了重载,故B类所拥有的函数为A类中的第一个show函数,B类中的第二个show函数(B类中第一个函数父亲A类没有)
B and A
B and A
A and D
b拥有从父类继承的第一个show函数和B类的两个函数,(第二个函数被B类重载了)且执行函数时要选择最近父类的函数,show(d)使用B的show方法,而不是A的
B and B
B and B
A and D