抽象類是否有必要至少有一個抽象方法?抽象類是否應該至少有一個抽象方法?
回答
否 - 您可以在沒有任何抽象方法的情況下聲明類抽象。從概念上講,這個類的實例可能沒有任何意義,或者您可能希望確保只有該類的子類可以實例化(無論出於何種原因)
+1這個答案在這裏是最「重點」和簡潔的答案。謝謝! – AndHeCodedIt
不,這不是必需的。您經常會看到"template method"設計模式,例如HttpServlet
,其中每種方法都已定義默認行爲,您可以自由覆蓋其中的一個(或多個)而不是其中的所有而不是其中的一個(或多個)。
在JDK 1.0中確實有必要在抽象類中至少有一個抽象方法。在JDK 1.1(1997?(我很老))中刪除了這個限制,並將這些類添加到Java庫中,例如java.awt.event.KeyAdapter
。
在C++中,您至少需要一個純虛函數來創建子類,並且至少有一個虛函數可以將RTTI添加到類中。通常使用析構函數是有意義的。
注意重寫非抽象方法時,使用@Override
是個不錯的主意。它不僅告訴讀者關於代碼試圖做什麼的重要信息,而且還會發現拼寫錯誤或不正確的參數類型阻止覆蓋的常見錯誤。
+1爲歷史課。 :) –
如果一個類的聲明中有一個abstract
修飾符,它將變爲abstract
類。
當沒有抽象方法時,將類定義爲抽象語法是完全有效的。我並不低調,但這個回答實際上是不正確的。請注意,問題的語言是Java,而不是C++。 – CPerkins
@CPerkins - 我的意思是說「不要相反」。 – fastcodejava
而你仍然錯了。如果一個類具有「抽象」修飾符,則它是抽象的,不管它是否具有抽象方法。 – EJP
- 1. 抽象類沒有抽象方法
- 2. 抽象類是否至少包含一個未實現的方法?
- 3. 「不能實例化抽象類......與抽象方法」的類不應該有任何抽象方法
- 4. 爲什麼你需要知道抽象類的抽象方法是否抽象
- 5. 爲抽象方法聲明抽象類是否強制?
- 6. 抽象類的方法覆蓋另一個抽象類
- 7. 方法是否抽象
- 8. C#:抽象類中的抽象和非抽象方法?
- 9. 具有抽象類參數的抽象方法的Java抽象類
- 10. 抽象方法重寫抽象方法
- 11. 減少抽象類
- 12. 缺少方法體抽象類
- 13. 一個抽象類
- 14. 我應該在抽象類實現接口時創建抽象方法嗎?
- 15. 錯誤:類不是抽象的,不重寫抽象方法
- 16. C#抽象類沒有任何抽象方法
- 17. 抽象類沒有任何抽象方法
- 18. 建議從抽象類中的方法調用抽象方法
- 19. 抽象方法
- 20. 抽象方法
- 21. 我應該創建靜態方法還是抽象超類
- 22. 抽象類工廠方法
- 23. 抽象類方法聲明
- 24. 使用抽象類方法
- 25. 抽象類和方法
- 26. 抽象與抽象類
- 27. 在我上有一個抽象類的現有庫擴展一個抽象類
- 28. 在抽象類中調用非抽象類方法
- 29. PHP。是否有可能將非抽象方法重新聲明爲抽象?
- 30. 模擬受保護的方法,該方法是一個擴展的抽象類
另請參閱http://stackoverflow.com/questions/362446/abstract-class-with-all-concrete-methods,但我不認爲它*相當*重複。 –