При использовании метода конструктора подкласса для создания объекта подкласса не только переменным-членам, объявленным в подклассе, выделяется память, но и переменным-членам родительского класса выделяется пространство памяти, но только часть, унаследованная подкласс выделяется. Переменные-члены служат переменными, назначенными объектам подкласса.
То есть, хотя закрытым переменным-членам родительского класса выделено пространство памяти, они не будут использоваться в качестве переменных объекта подкласса, если подкласс и родительский класс не находятся в одном и том же пакете, хотя и являются дружественными; Переменные-члены родительского класса выделили пространство памяти, но не как переменная объекта подкласса.
На этом этапе мы более или менее чувствуем, что некоторая память тратится впустую, когда подкласс создает объект. Это связано с тем, что когда объект создается с подклассом, переменным-членам родительского класса также выделяется пространство памяти, но только часть его используется в качестве переменных, назначенных объекту подкласса. Например: хотя закрытым переменным-членам родительского класса выделено пространство памяти, они не используются в качестве переменных объекта подкласса. Конечно, они не являются переменными объекта родительского класса, потому что мы не используем родительский класс. класс для создания любых объектов вообще. Однако следует отметить, что в подклассе все еще есть некоторые методы, унаследованные от родительского класса, но эти методы могут работать с этими ненаследованными переменными.
Например: объект подкласса ChinaPeople вызывает унаследованный метод для работы с переменными, которые не унаследованы подклассом, но имеют выделенное пространство памяти.
classPeople{privateintaverHeight=168;publicintgetAverHeight(){returnaverHeight;}}classChinaPeopleextendsPeople{intheight;publicvoidsetHeight(inth){//height=h+averHeight;//Недопустимо, подкласс не наследует averHeightheight=h;}publicintgetHeight(){returnheight }}публика icclassMainpublicstaticvoidmain(Stringargs[]){ChinaPeoplezhangSan=newChinaPeople();System.out.println(значение AverageHeight, не унаследованное объектом подкласса: +zhangSan.getAverHeight());zhangSan.setHeight(180);System.out. println (Значение переменной высоты экземпляра объекта подкласса: +zhangSan.getHeight());}}
Результаты бега следующие:
Значение AverageHeight, которое не наследуется объектом подкласса, равно: 168. Значение переменной высоты экземпляра объекта подкласса: 180.