簡體   English   中英

如果沒有抽象成員,基類應該標記為抽象嗎?

[英]Should a base class be marked abstract if there are no abstract members?

如果一個類沒有抽象成員,那么它是否可以被標記為抽象? 即使沒有直接實例化的實際理由呢? (除了單元測試)

是的,即使在沒有抽象方法的情況下,明確標記為不應實例化的基類也是合理和有益的。

  • 它強制執行通用指南,以使非葉類抽象化。
  • 它可以防止其他程序員創建該類的實例。 這可能會使您以后更容易添加抽象方法。

你想讓那個班級有一個實際的實例嗎? 如果是,那么不要將其標記為摘要。 如果不是,則將其標記為摘要。

簡短回答:是的。

答案很長: abstract關鍵字將類和/或其成員標記為不直接有用。 為什么這可能因情況而異; 抽象類可能過於基本,無法進行任何實際工作,或者它可能具有為此類中的其他代碼存在而需要存在的抽象成員,但不能在此級別具體定義。 缺點是,通過標記類抽象,您告訴編譯器和其他開發人員不要直接實例化此類,而是繼承它以創建具體有用的實現。 即使類具有所有成員的工作實現,如果您認為必須繼承該類以充分利用該實現,您也可以這樣做。

如果目標是創建一個其他類將擴展的基類,那么將它作為一個抽象類是有意義的。

但是,如果目標是創建某種形式的Utility類 - 一個只有static成員的類 - 處理它的最好方法是給類一個標記為private構造函數。 這樣,該類無法實例化,也無法進行子類化。 這發出一個明確的信號,即該類的唯一用途是使用其static方法。 (這是來自Effective Java的提示,作者Josh Bloch)

是的,我想是這樣。 至少那是我不時做的事情;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM