當用子類別的建構方法創建一個子類別的物件時,不僅子類別中聲明的成員變數被分配了內存,而且父類別的成員變數也都分配了內存空間,但只將子類別繼承的那部分成員變數作為分配給子類別物件的變數。
也就是說,父類別中的private成員變數儘管分配了記憶體空間,也不作為子類別物件的變數;同樣,如果子類別和父類別不在同一套件中,儘管父類別的友善成員變數分配了記憶體空間,但也不作為子類別物件的變數。
此時,我們或多或少覺得子類別在創建物件時似乎浪費了一些記憶體。這是因為當用子類別建立物件時,父類別的成員變數也都分配了記憶體空間,但只將其中一部分作為分配給子類別物件的變數。例如:父類別中的private成員變數儘管分配了記憶體空間,也不作為子類別物件的變量,當然他們也不是父類別某個物件的變量,因為我們根本就沒有使用父類別建立任何物件。但是,我們要注意到,子類別中還有一部分方法是從父類別繼承的,而這部分方法卻可以操作這部分未繼承的變數。
例如:子類別ChinaPeople的物件呼叫繼承的方法操作未被子類別繼承卻分配了記憶體空間的變數。
classPeople{privateintaverHeight=168;publicintgetAverHeight(){returnaverHeight;}}classChinaPeopleextendsPeople{intheight;publicvoidsetHeight(inth){//height=h+averHeight;//非法,子類別沒有繼承averHeightheight=h; }}publicclassMainpublicstaticvoidmain(Stringargs[]){ChinaPeoplezhangSan=newChinaPeople();System.out.println(子類別物件未繼承的averageHeight的值為:+zhangSan.getAverHeight());zhangSan.setHeight(180);System.out .println(子類別物件的實例變數height的值是:+zhangSan.getHeight());}}
運行結果如下:
子類別物件未繼承的averageHeight的值是:168子類別物件的實例變數height的值是:180