我有这个类结构:
abstract class A{
protected void doTest(){};
abstract void test();
}
abstract class B extends A{
}
class C extends B{
public void test(){
doTest();
}
}
class D extends A{
public void test(){
doTest();
}
}
D不能延长B.
两者中的test()将实现完全相同的功能(可以包含多行代码)
目前,我被迫以同样的方式复制行为
我无法创建另一个类来实现该行为,因为它访问受保护的方法。
有什么方法可以解决这个问题吗?
答案 0 :(得分:2)
如果test()
真的相同,则不应该是抽象的。
abstract class A{
protected void doTest(){};
public void test() {
//Shared functionality calling doTest() and doing other stuff.
}
}
即使test()
依赖于各个子类中的字段,您也可以创建抽象的getter并使用它们:
abstract class A{
protected void doTest(){};
protected abstract String getName();
public void test() {
//Shared functionality calling doTest() and doing other stuff.
//Can also use getName()
}
}
abstract class B extends A {}
class C extends B {
@Override public String getName() { return "C"; }
}
class D extends A {
@Override public String getName() { return "D"; }
}