【问题标题】:Is two-way horizontal inheritance possible?双向水平继承可能吗?
【发布时间】:2014-04-23 00:15:12
【问题描述】:

我是一名高中生,只有大约 8 个月的编码经验,所以请不要回答你的问题。

我正在为我的班级编写一个游戏,我知道,就像每个编写代码的人一样,继承只会顺着链条走,而不是向上。

我的问题有点长,但从这个开始:双向水平继承可能吗?让我用一张图来解释: 既然您看到了我的图片,以及我所说的双向水平继承,我现在想问在广阔的世界中是否有人创建了使红色箭头所示链接成为可能的 Java 代码?

回答时:我现在关于链接前任。 A 扩展 JPanel,B 扩展 A,因此 B 扩展 JPanel,所以不要告诉我链接任何东西。我只是想问一下,是否有任何来自 Oracle 的代码正在开发中以制作红色箭头所示的桥,或者是否有人拥有可以创建上述桥的代码。

【问题讨论】:

  • 我的预感是你想要一个像你提到的关系,其中子类 1 扩展 JPanel,子类 2 扩展子类 1。你想做什么,这可以让我们更好地回答你的问题
  • 不确定你的红色箭头可能提供什么 subclass1 -> subclass2 -> JPanel 不能。你能说出你希望完成但没有 tvat 链接就无法完成的事情吗?

标签: java inheritance


【解决方案1】:

简短的回答是否定的——Java 是单继承,所以一个类不能扩展多个类。这通常表明您应该重新考虑您的设计。不知道具体情况很难说,但是如果 Subclass1 和 Subclass2 相似,是否可以创建一个扩展 JPanel 的抽象类,然后 Subclass1 和 Subclass2 可以分别扩展该抽象类?

【讨论】:

  • 不要忘记接口也可以帮助解决这种情况。
  • @JeffStory 我只是想知道是否有人,例如Oracle 或一些聪明的软件天才已经创建了可以允许水平继承的代码。如果这存在,我会很高兴,因为它将允许我的二十一点游戏中的所有类(经销商和玩家)进行通信,从而使我的代码能够 100% 工作
  • 有些语言支持多重继承,Java 不是其中之一。这不是聪明的做事方式,而是语言的选择。如果你认为你需要像这样的水平继承,我建议你重新考虑你的设计,并确保你实际上是在尝试用继承创建“is-a”关系,或者(正如其他人指出的那样)组合对象(通过接口)更合适。
  • @user3519829 为此使用继承是不可行/不必要的。你可以用作文很好地交流。例如。有一个名为 Game 的类,其中实现了所有逻辑,并保存了对 Player/Dealer 类实例的引用。
【解决方案2】:

不,因为没有必要。 Using composition,你总能得到你想要的任何类结构的等价物。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-26
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2011-03-04
    相关资源
    最近更新 更多