如何确保在子项中调用超级方法?

2022-09-03 17:13:56

如果我在一个类中有这个方法,并且这个类的子级也有一个方法,我如何确保这个子类必须在它试图重写的send()方法中的某个地方调用super.send()?public void send() { /* some code */ }public void send() { /* some code*/ }

我想知道这一点,因为我在API中写过,如果你在重写它时不调用该方法的super,它会抛出一个异常,告诉我我没有调用super方法。这是硬编码的,还是可以用Java中的一些关键字来完成?


答案 1

你真的不能,但你可以...

class MySuperClass {
    public final void send() {
        preSend();
        // do the work...
        postSend();
    }

    protected void preSend() {
        // to be overridden in by sub classes
    }

    protected void postSend() {
        // to be overridden in by sub classes
    }

}

答案 2

您可以通过添加抽象方法来执行此操作(看不到其他方法):

abstract class MyClass 
{

public final void send()  // forbid changing this.
{
 // do something
 doSend():
}

protected abstract doSend(); // no external calls

}