我有这个问题涉及继承,多态性,重载和覆盖。我理解所有这些术语,但不确定它们在这里是如何工作的。代码如下:
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 whatever {
public static void main(String[] args) {
A a = new B(); // note the B here
B b = new B();
C c = new C();
D d = new D();
System.out.println(a.show(a)); // B and A
System.out.println(a.show(b)); // B and A
System.out.println(a.show(c)); // B and A
System.out.println(a.show(d)); // A and D
}
}
所以这里的任务是找到输出。我已经有了答案,这些是我提出的评论。
我理解第一个,因为Java会自动进行动态绑定,所以a.show()从B类调用show(),a是A类型,所以B.show(A obj)被调用。
最后一个也有意义,show()方法是重载的,并且由于d是D类型,因此调用A.show(D obj)是从A类继承而来的。
另外两个我遇到了麻烦。好吧,我知道这是有道理的,因为b和c在技术上都是A类型的对象,但是为什么它与“B和A”而不是“B和B”一起使用?
郎朗坤
慕姐8265434
相关分类