java - 强制重写类时调用基类版本方法,否则抛出异常

标签 java inheritance exception overriding custom-exceptions

如果重写方法没有显式调用其 super 方法,我想抛出自定义异常。如果任何类扩展类A并重写say()方法,应该强制调用super.say()来执行基类方法中编写的代码,如果失败,我想抛出自定义异常,例如super而不是异常

  class A {
    public void say() {
        System.out.println("From super");
    }
  }   

  class Demo extends A {
    @Override
    public void say() {
              //Check if user have called super.say() or not if not throw a custom  exception
       super.say();
       System.out.println("From Child");
    }

    public static void main(String[] args) {
      Demo d = new Demo();
      d.say();
    }

 }

最佳答案

这是 @DavidWallace 建议的方法,这比您想要的更好,因为它使得子类不可能阻止 say() 执行它在基类中执行的操作:

class A {
    public final void say() {
        System.out.println("From super");
        saySomethingElse();
    }

    /**
     * Subclasses can override this method to make the say() method 
     * say something else in addition to "From super".
     */
    protected void saySomethingElse() {
    }
}   

class Demo extends A {
    @Override
    protected void saySomethingElse() {
        System.out.println("From Child");
    }

    public static void main(String[] args) {
        Demo d = new Demo();
        d.say();
    }
}

关于java - 强制重写类时调用基类版本方法,否则抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34702828/

相关文章:

c# - AcceptTcpClient() 和基于 TcpClient 的类

c++ - 为什么在抛出异常指针时我应该使用引用捕获

java - 在游戏之间出现 IndexOutOfBoundsException

delphi - 我可以保证在表单销毁后执行自定义完成代码吗?

java - 带有 jdbc 领域的可移植安全角色映射

java - 如何在 docker 容器中运行瘦 jar

java - 在 Java 中删除 json 中的节点

java - 如何解决 JPA-CriteriaAPI 的 Java 警告和编译错误?

Java:重写泛型方法

java - java中每次调用构造函数都会创建对象吗?