今天小编给大家讲解移到经典的Java面试题,如下。
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 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 a1 = new A ;
实例化类A的对象,会加载A中的两个方法。
a1.show(b);
由于B继承了类A
在调用b的对象时候,会自动升级到A的对象。
打印出A and A
a1.show(c);
同理打印出A and A
打印出A and Aa1.show(d)
调用类A中show(D d )方法
打印出A and D
即:
A and A
A and A
A and D
A a2 = new B();
加载了类A中的show(D obj)以及类B中重写的方法show(A obj)
答案为:
B and A
B and A
A and D
B b = new B();实例化B的方法以及A中的show(D obj):
答案为:
B and B
B and B
A and D