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{}
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));
}
}
/*
跟大家解释一下这道题:
首先应该明白 A a2 = new B()是创建一个B对象并把它转换成A对象。
对于a1它是A类的对象有函数show(D),show(A),a2是B对象,然后转换成A那么它拥有的函数是show(d),show(A)此时A已覆盖,即返回值为(“B and A”)。b是一个B的对象,有函数show(D)(继承A),show(A)覆盖A,show(B)子类自有函数。C和D是B的子类。
a1.show(b)是在A中找到满足条件的方法,调用show(A)函数。result:A and A
a1.show(c)在A中找到show(A).result: A and A
a1.show(d)在A中找到show(D).result: A and D
a2.show(b)在它拥有的函数中找到被B覆盖过的show(A).result: B and A
a2.show(c)找到被B覆盖过的show(A).result: B and A
a2.show(d)show(D)result A and D
b.show(b) show(B) result:B and B
b.show(c) show(B) result: B and B
b.show(d) 上找到A中的show(D) result: A and D
a2.show(d)*/
|
|