我有一個抽象類命名爲車輛:如果覆蓋它,要求子類調用super.doSomething()?
public abstract class Vehicle {
public void run() {
addToRunningVehicleList();
}
}
我想,每一個該extends
車輛必須調用super.run()
如果他們override
run
方法類。例如:
public class Car {
@Override
public void run() { // Error here because does not call super.run()
carRunningAnimation();
}
}
在OOP概念或Java/C#中可能嗎?
編輯:繼佩塔爾·伊萬諾夫,我有這樣的代碼:
public abstract class Vehicle {
public final void run() {
Log.e("Run", "Add To List");
runImp();
}
public void runImp() {}
}
public class Car extends Vehicle {
@Override
public void runImp() {
Log.e("Run", "Run in Car");
}
}
然而,它並不適合公開的API非常好。當延長車輛,最終用戶必須重寫runImp
,但他們必須調用run()
方法,所以我必須要公開雙方run
和runImp
,這使得沒有好。
請記住你正在爲誰設計。如果它是一段內部代碼,評論就足夠了。如果它是一個公共API並且你希望人們繼承,那麼你需要寫一篇文檔告訴他們去做。在C#中,您可以使用虛擬和非虛擬方法來做一些鬼鬼祟祟的事情,但在Java中,如果不使用抽象基類,就很難執行此操作。 – Spence
@Spence你真的瞭解我的情況。我正在編寫公共API,因此評論或文檔可能不夠。不幸的是,我找不到'虛擬'的Java等價(你應該發表你的評論作爲答案,與一些代碼段,我會選擇你的答案:) –