【问题标题】:Is it possible to extends 2 different classes in Java?是否可以在 Java 中扩展 2 个不同的类?
【发布时间】:2014-07-08 08:19:13
【问题描述】:

我正在SoftKeyboard 上开展一个项目。我正在编辑随 Eclipse ADT 包提供的示例代码。我意识到它已经扩展了 InputMethodService。但是,我想在软键中附加一个ContextMenu

因此,在这种情况下,我也需要扩展 Activity。我该如何解决这个问题?

【问题讨论】:

  • 没有。 Java 不支持类的多重继承。如果您需要扩展多个类,那么您几乎肯定会遇到设计问题,并且真的需要扩展多个类。组合优于继承可能会有所帮助。
  • @user3580294 对不起,那是废话。虽然你不能在 Java 中这样做,但能够扩展多个类通常是一个有用的特性,而且绝对不是设计缺陷。它被广泛认为是 Java 的设计缺陷,只允许它以接口的残障方式出现。
  • @GabeSechan 抱歉,重复一遍我已经阅读了所有内容。诸如如果你想要多重继承,是时候考虑组合了。或者在很多情况下它真的不合适。 Here's 一个 bajillion 的例子,虽然老实说,我不确定是否只是像我这样的人在重复他们所听到的内容,尽管我认为作者的话至少有一定的分量。介意为你的最后一句话提供来源吗?这是我第一次听说它,而且它“经常有用”......
  • @GabeSechan 我想看到有人以另一种方式争论让我感到惊讶......很好奇为什么,当我听说 MI 本身不一定有缺陷时,它只会导致比其价值更糟糕的情况,而且通常有更好的解决方案。
  • @user3580294 在某些情况下 MI 是最好的,在某些情况下多继承是最好的。但仅仅因为有些地方它不是一个好主意并不意味着你完全抛弃它。说出不能被滥用的语言特征或模式。多重继承的主要问题是菱形 - 当您从具有公共基类的 2 个类继承时。如果您避免这种情况,则不会出现太多技术问题。

标签: java android keyboard android-softkeyboard extends


【解决方案1】:

不,java不支持多重继承,为什么如果扩展多个类,孩子不知道它必须选择哪个父级。要克服这一点,您必须选择 Interface。

更多信息请参考thisthisthis

【讨论】:

    【解决方案2】:

    您可以使用策略模式: linklink

    你应该创建接口,然后你的类应该像第二个链接中的例子那样实现这个接口。

    【讨论】:

      【解决方案3】:

      Java 不支持多重继承。

      您可以尝试以下解决方法:

      1)聚合:创建一个将这两个活动作为字段的类。

      2)接口。

      3)重新思考你的设计

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-11
        • 1970-01-01
        • 2017-07-09
        • 2012-03-12
        • 2011-02-08
        • 2010-12-05
        • 2015-01-18
        相关资源
        最近更新 更多