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中有从另一个方法()中调用B.method()的语法吗?
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中有从另一个方法()中调用B.method()的语法吗?
不,没有。派生类必须包含对super.method()
的调用。
如果B
想要防止子类覆盖method()
,则应声明method()
为final
。
您仍然可以通过显式使用超喜欢这个这个调用超级方法:
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(); }
}
在这里,用户可以通过重写methodInternal()
创造自己的method()
版本,但仍然是原来的method()
的行为是否完好。
你可以在B
method()
静态,然后把它作为B.method()
从需要的地方(你可能需要重命名静态方法,如果你想使用的名称为实例方法)的实例方法。
至少这就是我在类似情况下所做的。
也许你应该重新考虑你的设计。
嗯......这样认为,不像在C++中,如果我记得语法正确的话,你可以完成B :: method()。 – Murali 2010-08-20 18:37:20
B不想阻止子类覆盖方法(),因为B中有其他方法想要调用重写的方法()。当然有办法用多种方法解决它,但只是想知道我是否可以避免它。 – Murali 2010-08-20 18:40:35
这样没有直接的方法...解决方法是检查类的类型并相应地调用方法,但事情会变得混乱... – 2010-08-20 18:44:27