【问题标题】:Is it possible in Java to have a class inherit from two different classes depending on some variable?在Java中是否可以根据某个变量从两个不同的类继承一个类?
【发布时间】:2011-07-12 21:01:30
【问题描述】:

我在 Android 中有一个继承自 Activity 的父类,而我的所有其他 Activity 都继承自该父类。这个父母在 onPause 和 onResume 中做了一些我所有活动都需要的生命周期的东西。问题是我有一个必须从 Android 的 MapActivity 继承的 Map 活动,但我仍然需要这个活动来拥有我的父类生命周期方法。有没有办法让 MapActivity 从两个父母那里继承?或者也许是部分课程,我在这里不太确定。任何想法都会很棒。

谢谢,

布莱恩

【问题讨论】:

  • 顺便说一下,假设你有CustomActivity1CustomActivity2继承自Activity并重写onStart()方法,你认为继承自onStart()方法怎么样i>两者都 CustomActivity1CustomActivity2 应该怎么做?

标签: java android oop


【解决方案1】:

简短的回答是否定的。在 Java 中,你不能有一个继承自两个类的类。标准建议是使用interface,但我认为在这种情况下不适合您。

也许您可以通过使用组合来实现您正在寻找的代码重用,例如,而不是继承。如果您发布代码示例,我可以给您更具体的答案。

【讨论】:

  • 好吧,根据您的建议,我将所有共享代码移到了一个新类中,并在两个活动中从 onResume 和 onPause 静态调用函数。一切正常,只是进行了一些重构。
【解决方案2】:

抱歉,在 Java 中您只能扩展一个类。但是,您可以实现多个接口。您可以让 BaseMapActivity 类扩展 MapActivity,然后让 MainMapActivity 扩展该 BaseMapActivity。最简单的方法是从现有的基础Activity 中复制代码并将其放入 MainMapActivity。

【讨论】:

    【解决方案3】:

    在 Java 中,您只能从一个类扩展,但是您可以从一个类实现多个类。要考虑的另一件事是将扩展的子类链接在一起(这模拟了多重继承)。

    可以在这里找到更好的描述:http://www.javaworld.com/javaworld/jw-10-2005/jw-1024-multiple.html

    【讨论】:

      【解决方案4】:

      有趣的是,我今天早些时候遇到了完全相同的问题(但使用了 PreferenceActivity)。

      不幸的是,我认为这是不可能的,我最终复制了我的父类并将名称和 extends Activity 更改为 extends PreferenceActivity

      【讨论】:

        猜你喜欢
        • 2011-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-12
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 2017-03-15
        相关资源
        最近更新 更多