在接口中添加新方法时如何摆脱覆盖所有类

我有接口、抽象方法和更多分类并使用这些引用类型如下。


   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

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


应该如何设计?


子衿沉夜
浏览 138回答 3
3回答

慕侠2389804

您可以通过两种方式处理它:如果您使用的是 Java 7 或更低版本,请扩展 InterfaceA 以创建新接口    public InterfaceB extends InterfaceA{         // Your new methods definitions here..     }让 C 类和 D 类实现 InterfaceB。如果您使用的是 Java 8 或更高版本,可以将默认方法添加到 InterfaceA。覆盖默认实现以在类 C 和 D 中提供您的自定义实现

萧十郎

您应该考虑 SOLID 规则之一—— I“接口隔离原则”。您可能需要创建一个新接口,并且您的 C 类和 D 类可以实现多个接口。这是更好的设计方法。

白板的微信

看起来您没有使用继承。如果 C、D、E、F 是 A/AbstractA 的子类,那么 A 中定义的任何方法都应该对所有这些子类都有意义。您不能阻止一个方法的子类继承而允许另一个方法继承。如果您需要引入不同的概念,请使用不同的层次结构,但不要尝试设计统一的东西。对于层次结构中的公共实现,最好的 DRY 方法是将公共实现移动到抽象类中,用于需要实例字段的方法,并将它们移动到接口默认方法中,用于不需要它们的方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java