如果您的方法不需要访问私有状态,请在D类中添加静态方法,并从A,B,C中调用静态方法.
如果您的方法确实需要访问私有状态,请查看是否可以通过向每个类添加package-private getter来使用私有状态,然后在A中使用该方法.
否则,尝试将一些逻辑分解为公共接口而不是超类.
否则,尝试委托给一个帮助器类. (例如@Marcelo指出的作文而不是继承)
否则,重复每个类A,B,C中的方法.
作为通用接口方法的一个例子,结合D中的静态方法:
interface MyThing
{
public void doMyThing(String subject);
public List 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);
}
}