Java 调用未重写方法的语法
我有 在上面的例子中,如果您持有一个D的实例,比如D,那么D.anotherMethod()将导致调用D.methodJava 调用未重写方法的语法,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
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(); }
}