我有3个类A,B和C.这些扩展了另一个类D.
D类有一个在所有A,B和C类中使用的方法.
现在问题是类A,B和C应该扩展不同的类并使用D类中的相同方法.
我无法相信我应该在所有课程中复制和粘贴该方法.在C中有类似功能的包含吗?
顺便说一下,我正在开发Android应用程序.D类扩展了Activity,并提供了一种管理Android活动A,B和C的常用菜单的方法(这是Android文档中报告的官方方法).但是我需要这些活动扩展不同的类,比如ActivityList而不仅仅是Activity类.
如果您的方法不需要访问私有状态,请在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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8110 次 |
| 最近记录: |