我有
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()?
答案 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()
(如果要使用,可能需要重命名静态方法实例方法的名称。)
至少这是我在类似情况下所做的事情。
也许你也应该重新考虑你的设计。