面試系列之 java基礎:不想讓一個類被繼承,怎么做?你能想到幾種方法?


你認為有幾種方法?

一種?兩種?三種?

你以為除了使用 final 關鍵字以外還有其他方法?

這是昨天面試時被問到的,面試時我答使用 final 關鍵字,年輕的面試官突然問:“還有嗎?”(果然沒那么簡單?)

我不解,只好反問他:“還有什么方法?我還沒聽說過,可以指點一下。”

面試官所謂的“第二種”不讓類別繼承的方法

他緩緩說道:“子類一定會調用父類的什么方法?”不解,追問之。他說“構造器”。

我:“為什么子類一定要調用父類構造器?”

面試官:“父類沒有構造器提供的時候,子類還能繼承嗎?”

我:“沒有默認無參構造器,代表父類寫了其它的帶參構造器,子類自己手寫對應構造器就可以了。”

(好像是我的話提醒了他......)

面試官:“如果父類構造器私有,子類還能繼承嗎?”

我:“這個我就不太確定了。”

回家測試

確實除了final關鍵字,私有化構造器也能讓類變得不可繼承。因為子類構造器中需要調用父類構造器,如果父類一個可用的構造器都不提供,那么就無法繼承這個“父類”了。

不過測試發現,內部類之間卻可以打破這個限制。這樣的話使內部類之間不可繼承還是只有final關鍵字一種方法。測試效果如下兩張圖所示:

 

小結:

java中想讓普通類不可被繼承有兩種方法:一種是通過final關鍵字;第二種是私有化構造器,讓子類無可用的“父類”構造器可用,也就無法繼承。

而java中內部類卻可以打破上述第二種方法中所描述的限制,因此想要內部類之間不能被繼承的話,只有一種方法:final關鍵字。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM