2011-06-07 86 views
5

我有3类A,B和C,这些延伸另一类D.如何同样的方法添加到多个类(活性)

d类具有在所有的类A,B中使用的方法,和C.现在

问题是类A,B和C应扩展不同类别和类只使用同样的方法D.

我无法相信,我应该复制和粘贴的方法在我所有的课堂上。有没有像C中包含函数的东西?

顺便说一下,我正在开发一个Android应用程序。 D类扩展了Activity,并有一个管理Android活动A,B和C的通用菜单的方法(这是Android文档中报告的官方方法)。不过,我需要这些活动扩展不同的类,如ActivityList,而不仅仅是Activity类。

回答

6

如果你的方法并不需要从访问私有状态,d类中添加一个静态方法,并调用静态方法A,B,C

如果你的方法确实需要访问私有状态,看你是否能分解出需要通过添加一个包私人吸气每个班使用私有状态,然后使用方法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); 
    } 
} 
3

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

在这种情况下,您赞成composition高于inheritance

1

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

相关问题