簡體   English   中英

靜態工廠方法

[英]Static Factory methods

根據Joshu Bloch的Effective Java,“ 僅提供靜態工廠方法的主要缺點是沒有公共或受保護的構造函數的類不能被子類化。” 有人可以解釋一下這是什么意思嗎? 特別是粗體字。 如果沒有提供靜態工廠方法,則不能將帶有私有構造函數的類子類化,對嗎?

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

每當調用子類的構造函數時,也會調用父類的構造函數。 在沒有受保護的或公共的構造函數的情況下,子類化或擴展類將毫無意義。 因此不利。

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
    }
}

但是,如果超類不能使其構造函數可訪問(它是privet),則派生類無法在其任何構造函數中添加super調用。 這意味着我們無法為構造函數創建有效的代碼,並且由於所有類都必須至少具有一個構造函數,因此派生類無法編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM