Java 调用未重写方法的语法

Java 调用未重写方法的语法,java,Java,我有 在上面的例子中,如果您持有一个D的实例,比如D,那么D.anotherMethod()将导致调用D.method Java中是否有从anotherMethod()内部调用B.method()的语法?没有。派生类必须包含对super.method()的调用 如果B想要防止子类重写method(),它应该将method()声明为final,您仍然可以通过如下方式显式使用super来调用super方法: public class D extends B { public void met

我有

在上面的例子中,如果您持有一个D的实例,比如D,那么D.anotherMethod()将导致调用D.method


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

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


如果
B
想要防止子类重写
method()
,它应该将
method()
声明为
final

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

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

public class B
{
    public void method() {}

    public void anotherMethod() { method(); }
}
唯一需要做的是重写anotherMethod()

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

在这里,用户可以通过重写
methodInternal()
来创建自己版本的
method()
,但原始
方法()
的行为仍然完好无损。

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

至少在类似的情况下我也是这么做的


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

是的,我是开发B的人,我对D没有控制权,我不想让我的B.anotherMethod()调用被重写的方法(),而是我自己的方法。然后你必须阻止重写方法()的子类因为我在B中有其他方法,应该调用重写的方法(),我明白你的意思,但是很遗憾,一旦我允许它被重写,我的B方法()就不能用了:((我,作为B的开发者)嗯……想,不像C++中你可以做B::Mulk()如果我没有记错语法的话,那么.B不想阻止子类重写method(),因为B中还有其他方法希望调用重写的method()。当然有多种方法可以绕过它,但我只是想知道是否可以避免。没有直接的方法……解决方法可以是检查类类型并相应地调用方法,但事情会变得一团糟……正在重新阅读语句“只有重写的方法才能调用重写的方法。”,这是不正确的。我可以从任何派生类的方法中执行super.method(),而不仅仅是从D的方法-重写方法,对吗?wizard@-Oops,你是对的,你当然可以。但是,如果我理解你想做什么,那没有帮助。
public class D extends B{
    public void method() {}
    public void anotherMethod() { super.method(); }
}
public class D extends B{
    public void methodInternal() {}
}
public class B{
    public final void method() {
        //...
        methodInternal();
    }
    public void methodInternal() {}
    public void anotherMethod() { method(); }
}