簡體   English   中英

Java為什么不允許不能訪問其超類的任何構造函數的子類?

[英]Why does Java disallow subclasses which cannot access any constructors of its super class?

這個問題主要是參考Luiggi對這個SO問題的回答: 為什么不能從構造函數為private的類繼承?

我知道Java強制每個子類構造函數都必須調用其超類的構造函數之一。 如果所有超類的構造函數都是私有的,那么這顯然是不可能的。 因此,如果子類理論上可以從具有私有構造函數的超類繼承,那么結果將是您無法在子類上調用構造函數。

但是,如果我從不打算創建子類的實例怎么辦? 例如,如果我的子類僅添加靜態字段和方法,而我僅對使用超類的靜態字段和方法感興趣,該怎么辦? 然后,我不需要為子類構造函數。

如果我的子類僅添加靜態字段和方法,而我僅對使用超類的靜態字段和方法感興趣,該怎么辦?

在那種情況下,您不需要繼承-使用組合

您應該通過將其聲明為final來封閉您的課程。 這樣就可以保證不能創建任何子類

如果僅添加子類並且只能創建父類,則子“類”實際上只是一個輔助類,而沒有添加任何功能/職責/等。 給父母 在許多方面,它是沒有意義的。

這種子類將不是合法的子類。 即使將其所有字段和方法都聲明為靜態,它也將繼承其所有超類的所有字段和方法,一直返回到Object。 並且Object中有非靜態方法。 因此,此子類在其聲明中將具有一組非靜態方法(可能還有字段)。

然后,可以將該子類用作字段,變量,類型參數或方法參數的類型(即,可以使用任何類型的類型)。 編譯器必須跟蹤這一特定類型只能在某種受限意義上使用的事實。 (例如,假設有一個方法返回了該子類的值)。

我敢肯定,這類事情還有更多的陷阱。

因此,最重要的是,這將使編寫編譯器非常困難。

暫無
暫無

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

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