【发布时间】:2017-04-23 16:30:08
【问题描述】:
考虑以下声明:
public class Dog0
{ public void doNothing(Dog1 a, Dog2 b) {} }
public class Dog1 extends Dog0 {}
public class Dog2 extends Dog1 {}
以下初始化出现在不同的类中:
Dog0 d0 = new Dog0 ();
Dog1 d1 = new Dog1 ();
Dog1 d2 = new Dog2 ();
以下哪项是对 doNothing 的正确调用?
a) d0.doNothing(d0, d0);
b) d1.doNothing(d1, d1);
c) d1.doNothing(d2, d1);
d) d2.doNothing(d0, d0);
e) d2.doNothing(d2, d2);
我认为答案是 e) 但我不确定。有人可以向我解释一下吗?谢谢。
【问题讨论】:
-
为什么不将代码转储到项目中看看会发生什么?
-
Dog1 d2 = new Dog2 ();似乎是一个不正确的假设。你的意思可能是Dog2 d2 = new Dog2 ();。否则,这 5 个备选方案都不会编译。 -
我投票决定将此问题作为题外话结束,因为要求家庭作业帮助的问题必须包括您迄今为止为解决问题所做的工作摘要,以及对困难的描述你正在解决它。 Source
-
将子类的知识编码到超类中是个坏主意。这引入了循环依赖,
Dog0对其子类,当然还有子类对其超类型。重新分析对象模型,使类不引用它们的子类。 -
@DrewKennedy 我实际上在代码中尝试过。他们都没有工作。
标签: java inheritance multiple-choice