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

Bri*_*ian 10 java methods overriding super

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

我想知道这个,因为我已经用API写了,如果你在覆盖它时不调用那个方法的超级,它会抛出一个异常告诉我,我没有调用超级方法.这是硬编码还是可以用Java中的一些关键字来完成?

Tom*_*Tom 18

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

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
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 问答是关于java的 (3认同)

ic3*_*ic3 6

您可以通过添加抽象方法来实现此目的(不要看另一种方法):

abstract class MyClass 
{

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

protected abstract doSend(); // no external calls

}
Run Code Online (Sandbox Code Playgroud)


vax*_*uis 5

http://en.wikipedia.org/wiki/Call_super

你要做的是反模式; 你可以做到(许多Java核心类都可以),但你不应该 - 除非你有充分的理由.

除此之外,此处提供的所有答案都是正确的.

  • 这就是我想要的.我觉得强迫用户打电话给父母有问题,但不知道原因和解决方案. (2认同)