为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

子衿沉夜 2023-05-17 14:45:41
我有接口、抽象方法和更多分类并使用这些引用类型如下。   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 methodpublic Class D extend AbstractA //have to override three methodpublic Class E extend AbstractA //have to override three method but only should be override old methodpublic Class F extend AbstractA  //have to override three method  but only should be override old method这些类派生了 AbstractA 类,我只想在接口中使用新方法,但只实现 C 和 D 类,其他应该只使用旧方法。应该如何设计?
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

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

  1. 如果您使用的是 Java 7 或更低版本,请扩展 InterfaceA 以创建新接口

    public InterfaceB extends InterfaceA{ 
       // Your new methods definitions here..
    }

让 C 类和 D 类实现 InterfaceB。

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


查看完整回答
反对 回复 2023-05-17
?
萧十郎

TA贡献1815条经验 获得超12个赞

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



查看完整回答
反对 回复 2023-05-17
?
白板的微信

TA贡献1883条经验 获得超3个赞

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

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


查看完整回答
反对 回复 2023-05-17
  • 3 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信