Java 中通过覆盖一种方法扩展抽象 class 的最佳实践

Best practice in Java for extending abstract class with overriding one method

我有一个接口 I1,一个实现 I1 的抽象 Class A1 和许多 Classes C1。 ..n 扩展 A1.

现在,一个 class C3 正在为 I1 的方法 methodA 实现一种特殊行为,其中每隔一个扩展 Class A1 正在实现一种默认行为。

public interface I1 {
  public void methodA();
}

public abstract class A1 implements I1 {
  public void methodA(){
    //default behaviour
  }
  //other methods
}

public class C1 extends A1 {
  //do nothing regarding methodA, because the default behaviour is desired
  //other methods
}

public class C2 extends A1 {
  //do nothing regarding methodA, because the default behaviour is desired
  //other methods
}

public class C3 extends A1 {
  public void methodA(){
    //special behaviour
  }
  //other methods
}

现在,对我来说,这似乎不是最佳解决方案,因为很难发现 C3 正在覆盖其父级的某些方法。有这方面的最佳实践吗?

我会将 A1 中的所有常用方法移动到另一个抽象级别(我们称之为 ABase),并在 A1A2 中声明它们的特殊行为(如果有的话)。

这样,如果添加更多与 C3 相同类型的 类,则无需重新定义 methodA

public interface I1 {
  public void methodA();
}

public abstract class ABase implements I1 {
  //other methods
}

public abstract class A1 extends ABase {
  public void methodA(){
    //default behaviour
  }
}

public abstract class A2 extends ABase {
  public void methodA(){
    //default behaviour
  }
}

public class C1 extends A1 {
  //do nothing regarding methodA, because the default behaviour in A1 is desired
  //other methods
}

public class C2 extends A1 {
  //do nothing regarding methodA, because the default behaviour in A1 is desired
  //other methods
}

public class C3 extends A2 {
  //do nothing regarding methodA, because the default behaviour in A2 is desired
  //other methods
}