我有一个需要使用的界面:

public interface I {
      void go1();
      void go2();
}


然后我有多个实现这个的类

public class A implements I {
    @Override  void go1() { ... }
    @Override  void go2() { ... }
}

public class B implements I {
   @Override   void go1() { ... }
   @Override   void go2() { ... }
}


“ go2”方法对于所有类都是相同的,并且将其复制有点多余

所以最好:

1)为所有这些类创建一个抽象并将“ go2”放入其中?

要么

2)在每个类中创建“ go2”并调用“ super()”?

要么

3)有什么更好的??

最佳答案

为所有这些类创建一个摘要并将“ go2”放入其中?


是的,这是传统方式,如果go2()依赖于任何私有状态,它仍然可能是通过继承的唯一明智方式。即使使用Java 8和默认方法,您仍然不能在接口内使用任何私有状态。

如果该方法不依赖于私有状态,则可以通过使用方法上的default关键字直接在接口中声明方法主体(假设您使用的是Java 8或更高版本)。

如果您发现这两种方法都不能很好地发挥作用,则可以使用合成而不是继承(使用装饰器设计模式之类的方法)。

10-08 15:33