2014-11-23 112 views
0

我一直在讀the article有關構造函數,什麼已經寫有:預防對象類創建

公共類同樣可以防止實例的創建外 其包通過聲明至少一個構造函數,以防止創建具有公共訪問權的默認構造函數 ,並聲明不存在公共的 構造函數。

我很困惑聲明沒有構造函數是公開。這是因爲如果我們完全不聲明任何構造函數,那麼隱式聲明的默認構造函數將會隱式地聲明爲具有該類的訪問修飾符。這意味着如果該類聲明爲public,則默認構造函數也將公開。這就是我們可以在包外部使用它(在包外創建實例)。通過宣佈至少有一個構造

這是什麼原因造成的默認構造函數被創建

+0

的一句「聲明沒有構造函數是公衆」是指「未宣佈任何公共構造函數「。本來可以在JLS中更清楚地表達出來。 – Jesper 2014-11-23 07:56:47

回答

3

你錯過了這一點。

給出的例子有一個缺省訪問(包訪問)構造:

PackageOnly() { } 

...所以它滿足兩個條件:a)其聲明的至少一個構造函數; b)它沒有聲明任何公共構造函數。

2

沒有,這個類可以BA公開,但構造函數可以protected僅供套件存取權限或者它也可以是private - 大多是工廠靜態方法使用