有時只包含靜態方法和靜態欄位的類別會很有用。
例如,像 java.lang.Math、java.util.Arrays 這樣的類別,它們將數學運算或與陣列相關的方法組合在一起,可用作工具類別。或者像 java.util.Collections 一樣,將用於建立實作特定介面的物件的靜態工廠方法組合在一起。
這些工具類別不需要任何實體變數或方法,因此不需要建構函式。但是,如果沒有明確定義建構函式,編譯器會自動建立 public 的預設建構函式。因此,使用者無法區分此建構函式是自動建立的還是手動定義的。
為了防止這種情況,有時會將其設為抽象類別,但是,使用抽象類別無法阻止實體化。因為只要建立子類別並實體化即可。
因此,為了防止工具類別被實體化,必須將建構函式的存取修飾詞設為 private。
如上所示,如果預設建構函式的存取修飾詞為 private,則類別外部無法存取。此外,如果在內部呼叫預設建構函式,則會拋出例外以阻止它。
這種 private 建構函式對於使用者來說可能難以理解,因此建議加上註解。順帶一提,將建構函式設為 private 也會導致無法繼承。
评论0