在界面中添加新方法时如何摆脱覆盖所有 class

How to ged rid of override all class when add new method in interface

我有接口、抽象方法等class并使用这些引用类型如下。

   public interface InterfaceA {
    boolean mehod1();
    boolean method2();
    boolean newMethod(); //When added new method  
    }

public abstract class AbstractA implements InterfaceA{
// other common method

}


public Class C extend AbstractA //have to override three method
public Class D extend AbstractA //have to override three method
public Class E extend AbstractA //have to override three method but only should be override old method
public Class F extend AbstractA  //have to override three method  but only should be override old method

这些 classes 派生了 AbstractA class 我只想在接口中使用新方法但只实现 C 和 D class 其他应该只使用旧方法。

应该如何设计?

您应该考虑 SOLID 规则之一 - I - "Interface segregation principle"。您可能需要创建一个新接口,而您的 C 和 D 类 可以实现多个接口。这是更好的设计方法。

您可以通过两种方式处理:

  1. 如果您使用的是 Java 7 或更低版本,请扩展 InterfaceA 以创建新接口
    public InterfaceB extends InterfaceA{
    // Your new methods definitions here..
    }

让 类 C 和 D 实现 InterfaceB。

  1. 如果您使用的是 Java 8 或更高版本,请按照@Slaw 的建议,将默认方法添加到 InterfaceA。覆盖默认实现以在 类 C 和 D
  2. 中提供您的自定义实现

看起来你并没有真正使用继承。
如果C、D、E、F是A/AbstractAsub类,A中定义的任何方法都应该对所有这些sub类.
有意义 您不能阻止一个方法的子类继承而允许另一个方法继承。
如果您需要引入不同的概念,请使用不同的层次结构,但不要尝试设计统一的东西。

关于层次结构中公共实现的 DRY 的最佳方法是将公共实现移动到抽象 类 中用于需要实例字段的方法,并将它们移动到接口默认方法中用于不需要的方法他们。