使用封装时是否有一些技巧可以共享方法行为?

is there some trick to share methods behavior while using encapsulation?

我得到了这个 class 结构:

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() 将实现完全相同的功能(可以包含几行代码)。
目前我被迫以相同的方式复制行为。
我无法创建另一个 class 来实现该行为,因为它访问受保护的方法。

有什么解决办法吗?

如果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"; }

}