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