前两天给一刚毕业的小伙子面试,问java基础学的咋样,答还行,so问了一题蛮经典的问题,结果没答好,小伙伴们可以参考参考
类A
public class A {
public String show(D obj){
return ("A and D");
}
public String show(A obj){
return ("A and A");
}
}
类B
public class B extends A{
public String show(B obj){
return ("B and B");
}
public String show(A obj){
return ("B and A");
}
}
类C
public class C extends B{}
类D
public 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)); //⑨
}
输出结果分别都是什么?
这个其实能典型的描述封装、继承、多态之间的相互关系,了解他们之间的关系就简单了,执行顺序如下:
this.show(obj) > super.show(obj) > this.show(super(obj)) > super.show(super(obj))
具体的输出请自行分析吧