如何将相同的方法添加到多个类(活动)

时间:2011-06-07 20:18:38

标签: java android

我有3个A,B和C类。这些扩展了另一个D类。

D类有一个在所有A,B和C类中使用的方法。

现在的问题是A,B和C类应该扩展不同的类,并且只使用D类中的相同方法。

我无法相信我应该在所有课程中复制和粘贴该方法。在C中有没有类似函数的包含?

顺便说一句,我正在使用Android应用。 D类扩展了Activity,并提供了一种管理Android活动A,B和C的常用菜单的方法(这是Android文档中报告的官方方法)。但是我需要这些活动扩展不同的类,比如ActivityList,而不仅仅是Activity类。

3 个答案:

答案 0 :(得分:6)

如果您的方法不需要访问私有状态,请在D类中添加静态方法,并从A,B,C中调用静态方法。

如果您的方法确实需要访问私有状态,请查看是否可以通过向每个类添加package-private getter来分解是否需要使用私有状态,然后使用A中的方法。

否则,尝试将一些逻辑分解为常见的接口而不是超类。

否则,尝试委托给助手类。 (例如@Marcelo表示的作文而不是继承)

否则,重复每个A,B,C类中的方法。


作为通用接口方法的一个例子,结合D:

中的静态方法
interface MyThing
{
   public void doMyThing(String subject);
   public List<String> getThingNames();
}

class D
{
   static void doSomethingComplicatedWithMyThing(MyThing thing)
   {
      for (String name : thing.getThingNames())
      {
         boolean useThing = /* complicated logic */
         if (useThing)
           thing.doMyThing(name);
      }
   }
}

class A extends SomeClass implements MyThing
{
   /* implement methods of MyThing */

   void doSomethingComplicated()
   {
      D.doSomethingComplicatedWithMyThing(this);
   }
}

class B extends SomeOtherClass implements MyThing
{
   /* implement methods of MyThing */

   void doSomethingComplicated()
   {
      D.doSomethingComplicatedWithMyThing(this);
   }
}

class C extends YetAnotherClass implements MyThing
{
   /* implement methods of MyThing */

   void doSomethingComplicated()
   {
      D.doSomethingComplicatedWithMyThing(this);
   }
}

答案 1 :(得分:3)

您应该在每个A,B和C类定义中都有一个D类型的实例变量,并使用该实例中的方法。这样A,B和C仍然可以扩展其他类。

在这种情况下,您赞成composition而不是inheritance

答案 2 :(得分:1)

Java不支持多重继承。一个类只能扩展一个类。 也许使用界面是个好主意。您可以创建一个包含D类方法的接口,并使类A,B和C实现此接口。我不知道这是否有帮助。以下链接可能对您有用:http://java.sys-con.com/node/37748