2015-06-21 160 views
0

根據Joshu Bloch的Effective Java,「僅提供靜態工廠方法的主要缺點是沒有公共或受保護構造函數的類不能被子類化。」有人能解釋一下這是什麼意思?特別是粗體字。如果提供了一個靜態工廠方法,那麼帶有私有構造函數的類不能被正確的子類化?靜態工廠方法

+0

改寫了這個問題。 – Kishore

回答

3

只提供靜態工廠方法是,沒有公開 或受保護構造函數的類不能被子類化。

每當調用子類的構造函數時,父類的構造函數也會被調用。在沒有受保護或公共建設者的情況下,子類別或擴展類別是沒有意義的。因此缺點。

+3

減去_make no sense_和更多_won't compile_。 –

0

Java需要派生類來確保繼承的字段將被正確初始化。它通過在構造函數調用開始時創建超類的構造函數來完成。

這樣的代碼看起來應該像

class Derived class Parent{ 
    public Derived(){ 
     super();//this will be added automatically by compiler 
     //or super(arguments) if you want to use constructor with arguments 
    } 
} 

但如果超不作它的構造函數訪問(這是女貞)的任何構造的派生類中不能添加super電話。這意味着我們不能爲構造函數創建有效的代碼,並且由於所有類都必須至少有一個構造函數派生類無法編譯。