當前有一個類說A,它有最終方法mainMethod(),它調用三個方法a(),b()和c()。現在,子類必須實現a和b,所以我將它們抽象化。但可能不需要c。我如何實現它?我正在使用PHP。如何在類中實現一個可能或不可能在子類中被覆蓋的函數?
回答
只需創建一個空的非抽象方法,並在註釋中描述它可能會被覆蓋。 E.g:
abstract class A
{
public abstract function a();
public abstract function b();
/**
* This method may be overwritten for purpose X ...
*/
public function c()
{
/* empty */
}
}
這樣你就可以打電話c()
,並且它可能會或可能不會有任何作用。繼承類被強制執行a()
和b()
,並可以選擇覆蓋c()
。一個像NetBeans這樣的好的PHP編輯器,或者任何能夠提示代碼的東西,其中也會顯示註釋,所以程序員會被告知函數的用途。
我想到了這一點,但留下空的方法是一個不好的做法。有沒有其他方法? – Pushkar 2015-02-06 17:07:46
我既不認爲這是不好的做法,也不認爲有另一種方式。你不能調用一個未定義的方法,也不能創建一個不需要實現的抽象方法。 – 2015-02-06 17:20:42
一個接口可能是更好的工具來執行'a()'和'b()' – 2018-02-21 12:45:20
- 1. 「覆蓋」子類型中的實例變量:可能的風險?
- 2. 功能沒有被覆蓋的子類
- 3. 是否有可能在不同的類中實現類成員函數
- 4. 抽象類可以在派生類中被覆蓋,而不需要在基類中實現
- 5. 如何在UIScrollView中實現一個可拖動的UIView子類?
- 6. 約束一個超類不能覆蓋子類的值
- 7. 如何覆蓋可以子類的NSMutableDictionary
- 8. C#覆蓋虛擬函數,而不必實現另一個類
- 9. 現在可以在Gmail中實現浮動功能或類似功能嗎?
- 10. browser.download.manager.showWhenStarting可能不會被覆蓋
- 11. 一個類的成員函數在功能中不被識別
- 12. android覆蓋子類中的函數
- 13. groovy受保護的屬性不能在子類中覆蓋
- 14. 是否有可能在WordPress中覆蓋核心類
- 15. 如何覆蓋類或undeclare類或在python中重新聲明一個類?
- 16. 不能覆蓋超類的抽象方法時,子類是在另一個包
- 17. 是否有可能訪問在Python中被覆蓋的原始函數
- 18. 構造函數覆蓋可能嗎?
- 19. 可能會告訴一個子類是否覆蓋了一個方法?
- 20. 可能有一個函數可用於泛型類中的一種類型?
- 21. 它是一個覆蓋或子類
- 22. 是否有可能實現可空類型一樣NullableOfInteger在VB6
- 23. 是否有可能在實現IDisposable的類的析構函數中調用GC?
- 24. 如何防止父類的實例變量被python中的子類覆蓋?
- 25. Python類 - 實例被覆蓋?
- 26. 類實現在一個罐子裏的接口,但不覆蓋的方法
- 27. 在子類中燙傷覆蓋參數
- 28. 私有成員沒有被Java中的子類繼承(或可以覆蓋)?
- 29. 函數的參數,可能會或可能不存在
- 30. 如何將一組可能或不可能出現在一行中的數字捕獲到組中?
請花點時間想出一個實際的代碼示例。由於該問題目前已經編寫完成,因此很難確切地看到您遇到的問題,並且此處提出的解決方案可能無法解決您希望的問題。 – 2018-02-21 12:44:16