【问题标题】:Multiple Choice Involving Inheritance in Java?Java中涉及继承的多项选择?
【发布时间】: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


【解决方案1】:

更正

None 是答案,因为对于 E 是答案,Dog1 d2 = new Dog2(); 应该变成Dog2 d2 = new Dog2();

但如果是,E 将是正确答案。

doNothing 接受 Dog1, Dog2 作为其参数。 Dog2Dog1,因此,您可以使用 Dog2 代替 Dog1

【讨论】:

  • Stack Overflow 是一个问答网站,而不是家庭作业写作服务。请不要让用户有理由相信。谢谢。
  • 我觉得用户想要解释为什么答案是这样的。用户进行了有根据的猜测,但没有完全理解继承的规则,因此我认为一些澄清是有效的。 IMO,他不只是说,“你能帮我解决这个问题吗?”
  • @EyuelDK 谢谢。
  • @JoeC 我知道这不是家庭作业帮助。我只是很困惑为什么没有一个答案似乎是合理的,而唯一似乎最准确的答案就是 e。我不觉得我在问如何解决这个问题。根据我对继承的理解,我知道这些答案似乎都不正确,但我问了这个问题,因为我认为我误解了关于继承的一些东西,并且想知道基于这个问题是否有什么我不明白的。谢谢。
  • 我希望解释对您有所帮助。下一次,我建议你展示你的努力或你的思考过程,这样人们就不会仅仅认为你正在努力完成你的家庭作业。我也是初学者,我很同情你的立场和困惑——这就是我为你回答的原因。试着小心你问问题的方式。祝你有美好的一天:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 2015-10-10
  • 2012-10-13
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多