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

时间:2016-09-10 04:24:17

标签: java inheritance encapsulation

我有这个类结构:

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

有什么方法可以解决这个问题吗?

1 个答案:

答案 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"; }

}