1. 程式人生 > >Java 中子類是否只繼承父類的非私有變數和方法?

Java 中子類是否只繼承父類的非私有變數和方法?

今天在 CSDN 論壇中見到有人問在 Java 中子類是否只繼承父類的非私有變數和方法(原貼在此)。大部分跟貼都認為這句話是正確的,但是對於這個問題背後的本質理解卻是錯誤的。

首先我們明確一下繼承一詞的概念,在 Java 中,繼承一詞的意義是有限制的。一個子類只能繼承其父類的可訪問的成員,並且該子類沒有覆蓋或者說隱藏父類中的那些可訪問成員。所以,一個類的成員就是指在這個類中所宣告的屬性和方法,再加上從其父類繼承而來的屬性和方法。也就是說,子類是不能繼承父類的私有成員的。

雖然子類不繼承父類中的私有成員,但是在父類中生命的這些私有成員仍然是子類型別物件的一部分。因為在例項化物件的時候,只初始化在當前類中所宣告的屬性明顯是不足夠的,還需要初始化其父類中所有宣告的屬性。在例項化的過程中,
JVM 需要為物件的類及其父類中所有定義的屬性分配空間,包括父類中宣告的私有成員。

所以,我們可以說:子類不能從父類繼承私有成員,但是子類的物件是包括子類所不能從父類中繼承的私有成員的。