java - 强制子类重写这两个方法或一个都不重写

标签 java

假设我有一个带有一对方法的基类(称为 foobar)。在大多数情况下,它们不需要被覆盖,但在某些情况下,它们需要被覆盖。我想确定如果其中一个被重写,那么另一个也必须被重写,否则就是一个错误。

我可以使用什么技巧来确保两种方法都没有被覆盖,或者两者都被覆盖?

最佳答案

这已被证明是一个有趣的思维练习。我能想到的最佳解决方案如下:

为你的方法声明一个接口(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/

相关文章:

Java/Swing 应用程序随机卡住

java - 对象的引用问题

java - Java 中的时区验证

java - Servlet.service() 抛出 ClassCastException

java - 如何使用apache common vfs上传字节数组

java - 如何使用另一个堆栈反转java中的堆栈?

java - "Developers use the returned Future object to track progress of the transmission."是什么意思

java for循环第一个字符串的第一个字符然后是第二个字符串的最后一个字符

Java GUI 编译没有错误,但有时什么都不显示

java - 等效于 Java 8 中的 Scala 的 foldLeft