Java中私有變量能否被子類繼承?
最近在看OCJP的題庫,看到有部分題就是在考察多態中的繼承相關,
在CSDN論壇上相關大家說法也是衆多紛紜,下面簡單例子說明相關關係
- public class TestExtends {
- public static void main(String[] args) {
- Father f = new Son();
- Son s = new Son();
- ● f.FMethod(); // 斷點所在位置
- s.FMethod();
- }
- }
- class Father{
- protected int k = 0;
- private int p = 1;
- private final int q = 100;
- public void FMethod(){}
- }
- class Son extends Father {
- }
❶在斷點watch結果:
通過斷點的watch可以看到在子類實例了父類後,無論是私有成員,還是final類型的私有成員,在子類裏都可以被“看到(被繼承)”。
❷書寫代碼部分截圖
通過Eclipse編譯器可以看到:在子類是無法訪問父類私有成員的
總結:
❶、關於私有成員變量
無論父類中的成員變量是pirvate、public、還是其它類型的,子類都會擁有(繼承)父類中的這些成員變量。但是父類中的私有成員變量,無法在子類中直接訪問,可以通過從父類中繼承得到的protected、public方法(如getter、setter方法)來訪問。
個人認爲這更好的提現了JAVA特性中的封裝,而且符合軟件工程的設計思想:低耦合
❷、關於靜態成員變量
無論父類中的成員變量是靜態的、還是非靜態的,子類都會擁有父類中的這些成員變量。
❸、關於被子類覆蓋的成員變量
無論父類中的成員變量是否被子類覆蓋,子類都會擁有父類中的這些成員變量。
轉載地址:http://blog.csdn.net/dietime1943/article/details/52926390