2012-05-17 192 views
0

我在閱讀有關私有構造函數的信息,並發現了一些我無法理解的觀點。它說,如果聲明爲private構造函數:正確使用私有構造函數

  1. 那類不能被明確地從另一個類
  2. 該類不能被繼承
  3. 如果在只包含靜態工具方法的類中使用實例化

我的第一個問題:2說這個類不能被繼承。那麼,如果你聲明一個私人類,那麼它仍然會滿足這個屬性。是否因爲如果一個類是私有的,它仍然可以被另一個類從外部顯式實例化?

我的第二個問題:我不明白要點3。如果我有一個充滿靜態方法的助手類,我永遠不必實例化那個類來使用這些方法。那麼,那個你永遠不會實例化的構造函數的目的是什麼?

回答

1

答案爲Java

問題1你混淆的私有類,與具有私有構造函數的類。私有構造函數主要用於靜態類,這些靜態類不會被安裝(即它們只有一堆靜態方法)。

問題2究竟有沒有需要一個構造函數,因此你必須明確地創建一個私有的構造函數,以便它不會默認建築工,如果沒有被定義

一個空類的JVM將提供沒有定義總是會被默認的,由JVM無參數的構造方法

+0

只有*只有私有構造函數並且沒有調用它們的私有成員的類將實際上是一個靜態類,但完全有可能擁有其實例僅通過工廠方法創建的類,並且可能有幾個類公共或受保護的構造函數,這些構造函數鏈接到一個通用的私有構造函數,該構造函數完成了所有公共構造的共同構造部分。 – supercat

1

我拿作爲一個例子(不是最好的面向對象的語言清楚,但很受歡迎) - 既然你不是界定哪些languge做你意思是。

Ad.2。在這些語言中,你必須顯式地調用超類的構造函數,或者爲你隱式調用它。從子類你不能調用私有方法(只有public和protected) - 這個規則也適用於構造函數。這意味着如果該類只有私有構造函數,則無法在子類構造函數中調用它。所以你不能繼承這樣的類。

Ad。 3.只是爲了避免混淆 - 因爲這個類只是實用方法的一個容器,所以沒有實例化它的意義。這樣你可以在編譯時強制執行這條規則。

相關問題