用于调用未重写方法的语法

时间:2010-08-20 18:28:56

标签: java

我有

public class D extends B
{
    public void method() {}
}

public class B
{
    public void method() {}

    public void anotherMethod() { method(); }
}

在上面,如果你持有D的实例,比如d,d.anotherMethod()会导致调用D.method。

Java中是否有语法从anotherMethod()中调用B.method()?

3 个答案:

答案 0 :(得分:3)

不,没有。派生类必须包含对super.method()的调用。

如果B想要阻止子类覆盖method(),则应将method()声明为final

答案 1 :(得分:0)

你仍然可以通过显式使用super来调用super方法,如下所示:

public class D extends B{
    public void method() {}
    public void anotherMethod() { super.method(); }
}

唯一需要的是覆盖anotherMethod()。

另一种方式是这样思考。您希望anotherMethod调用B方法(),所以:

public class D extends B{
    public void methodInternal() {}
}
public class B{
    public final void method() {
        //...
        methodInternal();
    }
    public void methodInternal() {}
    public void anotherMethod() { method(); }
}

此处,用户可以通过覆盖method()来创建自己的methodInternal()版本,但原始method()的行为仍然完好无损。

答案 2 :(得分:0)

您可以在method()中设置B静态,然后从需要它的实例方法中将其称为B.method()(如果要使用,可能需要重命名静态方法实例方法的名称。)

至少这是我在类似情况下所做的事情。

也许你也应该重新考虑你的设计。