题目:有以下类
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{}
问,以下输出结果是什么?
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));
题目分析:
1. a1.show(b)
分析:当前参数传递为b对象,B类继承了A类,因为A a1创建是A的对象,所以a1能调用的只有自己的两个方法,即调用了show(A obj)
输出 A and A
2. a1.show(c)
分析:同上,C类继承B类,B类又继承A类 ,即调用了A类中的show(A obj)
输出 A and A
3. a1.show(d)
分析:同上,D继承B类,B又继承A ,因为A a1创建是A的对象,即调用了A类中的show(D obj)
输出 A and D
4. a2.show(b)
分析:参数传递的是B对象,而a2创建的是B的对象,即调用的B类中的重写了A类的方法show(A obj)
输出 B and A
5. a2.show(c)
分析:同上,参数为C类,C继承了B,即调用的B类中的重写了A类的方法show(A obj)
输出 B and A
6. a2.show(d)
分析:同上,参数为D的对象,D继承了B,B又继承了A,此时调用B继承了A的方法show(D obj)
输出 A and D
7. b.show(b)
分析:参数传B对象,b调用B中的show(B obj)
输出 B and B
8. b.show(c)
分析:参数是C的对象,C继承了B,即调用B中的show(B obj)
输出 B and B
9. b.show(d)
分析:参数是D的对象,D继承了B,此处调用B继承了A中的方法show(D obj)
输出 A and D
以上便是这个小小面试题的思路分析啦,分享给大家。