Ao usar o método construtor de uma subclasse para criar um objeto da subclasse, não apenas as variáveis de membro declaradas na subclasse recebem memória, mas também as variáveis de membro da classe pai recebem espaço de memória, mas apenas a parte herdada pelo subclasse é alocada. Variáveis de membro servem como variáveis atribuídas a objetos de subclasse.
Ou seja, embora as variáveis-membro privadas na classe pai tenham espaço de memória alocado, elas não serão usadas como variáveis do objeto da subclasse da mesma forma, se a subclasse e a classe pai não estiverem no mesmo pacote, embora sejam amigáveis; variáveis de membro da classe pai alocaram espaço de memória, mas não como uma variável de um objeto de subclasse.
Neste ponto, sentimos mais ou menos que alguma memória parece ser desperdiçada quando a subclasse cria o objeto. Isso ocorre porque quando um objeto é criado com uma subclasse, as variáveis-membro da classe pai também recebem espaço de memória, mas apenas parte dele é usada como variáveis atribuídas ao objeto da subclasse. Por exemplo: embora as variáveis-membro privadas na classe pai tenham espaço de memória alocado, elas não são usadas como variáveis do objeto da subclasse. É claro que não são variáveis de um objeto da classe pai, porque não usamos o pai. classe para criar qualquer objeto. No entanto, devemos observar que ainda existem alguns métodos na subclasse que são herdados da classe pai, mas esses métodos podem operar nessas variáveis não herdadas.
Por exemplo: o objeto da subclasse ChinaPeople chama o método herdado para operar variáveis que não são herdadas pela subclasse, mas possuem espaço de memória alocado.
classPeople{privateintaverHeight=168;publicintgetAverHeight(){returnaverHeight;}}classChinaPeopleextendsPeople{intheight;publicvoidsetHeight(inth){//height=h+averHeight;//Ilegal, a subclasse não herda averHeightheight=h;}publicintgetHeight(){returnheight ; }}publicclassMainpublicstaticvoidmain(Stringargs[]){ChinaPeoplezhangSan=newChinaPeople();System.out.println(o valor de AverageHeight não herdado pelo objeto da subclasse é: +zhangSan.getAverHeight());zhangSan.setHeight(180);System .out .println(O valor da variável de instância height do objeto da subclasse é: +zhangSan.getHeight());}}
Os resultados da execução são os seguintes:
O valor de AverageHeight que não é herdado pelo objeto de subclasse é: 168. O valor da variável de instância height do objeto de subclasse é: 180.