假设我有一个带有一对方法的基类(称为 foo
和 bar
)。在大多数情况下,它们不需要被覆盖,但在某些情况下,它们需要被覆盖。我想确定如果其中一个被重写,那么另一个也必须被重写,否则就是一个错误。
我可以使用什么技巧来确保两种方法都没有被覆盖,或者两者都被覆盖?
最佳答案
这已被证明是一个有趣的思维练习。我能想到的最佳解决方案如下:
为你的方法声明一个接口(interface):
public interface YourInterface {
public void methodOne();
public void methodTwo();
}
通过委托(delegate)给内部 YourInterface
实例创建一个实现这些方法的基类。在 protected 构造函数中获取一个参数来覆盖默认行为:
public abstract class Base implements YourInterface {
private YourInterface override;
protected Base(YourInterface override) {
this.override = (override == null) ? new BaseImplementation() : override;
}
@Override
public final void methodOne() {
override.methodOne();
}
@Override
public final void methodTwo() {
override.methodTwo();
}
// This is the default implementation
private static class BaseImplementation implements YourInterface {
@Override
public void methodOne() {
System.out.println("Original one.");
}
@Override
public void methodTwo() {
System.out.println("Original two.");
}
}
}
这两个方法在基类中是final
,因此子类不能只覆盖其中一个。
不一定是优雅或可取的解决方案。
关于java - 强制子类重写这两个方法或一个都不重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20499626/