我有一个需要使用的界面:
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或更高版本)。
如果您发现这两种方法都不能很好地发挥作用,则可以使用合成而不是继承(使用装饰器设计模式之类的方法)。