java中子類有沒有繼承父類的私有變數?

時間 2021-06-28 07:50:58

1樓:atlanc

確實是繼承了,但是父類臨終前對子類說,這筆遺產,你不能亂動,只能用我的非private方法來動。也就是說,父類的private屬性都會遺傳給子類,但是子類只能沿襲父類的生活習慣來使用這些屬性。

2樓:肖遙

我看到官方文件說不能繼承私有成員的時候也懵了。。

標準答案是「不能繼承」。但是這裡的處理是很特殊的,不能繼承並不意味著子類與父類的私有成員沒有關係。

乙個物件可以直接操作自己的private屬性,如果用子類物件直接操作父類的私有屬性,編譯器會提示invisible。 因此肯定不是「繼承」,來自父類的私有屬性與子類自己的私有屬性是不同的。

同時,我們可以在子類中通過父類的getter/setter方法訪問父類的私有屬性。這裡類似於子類物件隱式的持有乙個父類物件,通過這個物件來操作父類的私有屬性。但JVM會進行特殊處理,語法與真正持有乙個父類物件不同。

邏輯上我們認為子類物件有這些屬性。

簡單說,子類物件「擁有」父類物件的私有屬性,但無法直接操作,不屬於「繼承」。

對於父類物件的非私有屬性,JVM的處理方法可能是一樣的。但是子類物件在訪問這些屬性時與訪問自己的屬性的語法沒有區別,等效於訪問自己的屬性。 符合「繼承」的定義。

Java子類到底有沒有繼承父類的私有字段?

Seven555 當初自己也有小糾結一下這個問題,不過後來看debug就明白啦public class Person public class Student extends Person 自己在寫個main函式測試一下,new乙個student物件,eclipse的debug結果 實際上有繼承過來...

Java的多型為何可以由子類例項化父類?

胖不起來 程式最終執行,取決於你new的是誰,型別只是一種約束,比如,父類有乙個 a 方法,子類重寫了a,並且增加了 b 方法,假如定義是這樣 Father f new son 在記憶體中實際存在的是son的例項,那是不是可以呼叫 a 和 b 了呢,不是的,這時候 Father型別就起約束作用了,使...

如何理解 模板類繼承模板類, 子類看不到父類成員?

王現紅 類模板能夠承繼也能夠被承繼。1.在乙個類模板中,乙個非依靠型基類是指 無須知道模板實參就能夠徹底確定型別的基類。例如 template class Base 正常訪問承繼成員 T strange T是Base T,而不是模板引數留意事項 關於模板中的非依靠型別而言,假如在他的派生類中查詢乙個...