Cuando se utiliza el método constructor de una subclase para crear un objeto de la subclase, no solo se asigna memoria a las variables miembro declaradas en la subclase, sino que también se asigna espacio de memoria a las variables miembro de la clase principal, pero solo la parte heredada por la Se asigna la subclase. Las variables miembro sirven como variables asignadas a los objetos de la subclase.
Es decir, aunque las variables miembro privadas en la clase principal tienen espacio de memoria asignado, no se usarán como variables del objeto de la subclase de manera similar, si la subclase y la clase principal no están en el mismo paquete, aunque sean amigables; Las variables miembro de la clase principal tienen espacio de memoria asignado, pero no como una variable de un objeto de subclase.
En este punto, sentimos más o menos que parece desperdiciarse algo de memoria cuando la subclase crea el objeto. Esto se debe a que cuando se crea un objeto con una subclase, a las variables miembro de la clase principal también se les asigna espacio de memoria, pero solo una parte se usa como variables asignadas al objeto de la subclase. Por ejemplo: aunque las variables miembro privadas en la clase principal tienen espacio de memoria asignado, no se usan como variables del objeto de la subclase. Por supuesto, no son variables de un objeto de la clase principal, porque no usamos la clase principal. clase para crear cualquier objeto. Sin embargo, debemos tener en cuenta que todavía hay algunos métodos en la subclase que se heredan de la clase principal, pero estos métodos pueden operar en estas variables no heredadas.
Por ejemplo: el objeto de la subclase ChinaPeople llama al método heredado para operar variables que no son heredadas por la subclase pero a las que se les ha asignado espacio de memoria.
classPeople{privateintaverHeight=168;publicintgetAverHeight(){returnaverHeight;}}classChinaPeopleextendsPeople{intheight;publicvoidsetHeight(inth){//height=h+averHeight;//Ilegal, la subclase no hereda averHeightheight=h;}publicintgetHeight(){returnheight }}publicclassMainpublicstaticvoidmain(Stringargs[]){ChinaPeoplezhangSan=newChinaPeople();System.out.println(el valor de AverageHeight no heredado por el objeto de subclase es: +zhangSan.getAverHeight());zhangSan.setHeight(180);System .out .println(El valor de la altura de la variable de instancia del objeto de subclase es: +zhangSan.getHeight());}}
Los resultados de ejecución son los siguientes:
El valor de AverageHeight que no hereda el objeto de subclase es: 168. El valor de la altura de la variable de instancia del objeto de subclase es: 180.