通過私有建構函式強化不可例項化的能力

2021-08-31 08:43:36 字數 408 閱讀 2715

通過私有化建構函式強化不可例項化的能力:

企圖通過將乙個類做成抽象類來強制該類不可被例項化,這是行不通的。

有簡單的習慣用法可以確保乙個類不可被例項化。由於只有乙個類不包含顯示的建構函式的時候,編譯器才會生成預設的建構函式,所以我們只要讓這個類包含單個顯示的私有建構函式,則它就不可被例項化了。

因為顯示建構函式是私有的,所以在該類的外部它是不可被訪問的。假設該建構函式不被類自身從內部呼叫,就能保證該類永遠不會被例項化,這種習慣有點違反直覺,好像建構函式就專門設計成不能被呼叫一樣。所以,明智的做法是在**中對於建構函式的作用增加一些注釋。

這種習慣用法也有***,它使得乙個類不能被子類化。所有的建構函式都必須要呼叫乙個可訪問的超類(superclass)建構函式,無論顯示地或隱式地呼叫,在這種情形下,子類就沒有可以訪問的建構函式來呼叫了。

通過私有構造器強化不可例項化的能力

有時候,我們需要建立一些工具類,只包含靜態方法和靜態域,不希望被例項化,因為例項對它沒有任何的意義。有一種情況,我們可以將類做成抽象類來強制該類不可被例項化,但這是行不通的,因為該類可以被子類化,並且子類可以例項化。在缺少顯示構造器的情況下,編譯器會自動提供乙個公有的,無參的預設構造器,由於當子類不...

通過私有構造器強化不可例項化的能力

你可能需要編寫只包含靜態方法和靜態域的類。這樣的工具類不希望被例項化,例項化對他沒有任何意義。企圖通過將類做成抽象類來強制該類不可被例項化,這是行不通的 工具類 util 就是一類不該被例項化類的代表。它們只是提供一些實用功能,例項化之是毫無意義的。demo noninstantiable util...

第4條 通過私有構造器強化不可例項化的能力

有時候可能只需要編寫包含靜態方法和靜態域的類。這些類的名聲很不好,因為有些人再物件導向的語言中濫用這些類來編寫過程化的程式。儘管如此,他們也確實有他們特有的用處。我們可以利用這種類,把基本型別的值或者陣列型別上的相關方法組織起來,也可以把實現特定介面上的靜態方法組織起來,還可以利用這種類把final...