logo

Classes pai e filho com o mesmo membro de dados em Java

Em C++, temos todos os métodos dos membros da classe como não virtuais. Para fazer isso, temos que usar uma palavra-chave como prefixo conhecido como virtual . Enquanto em Java temos todos os métodos de membros de classe como virtuais por padrão. Para torná-los não virtuais, usamos a palavra-chave final .

Variáveis ​​​​de referência em Java são basicamente variáveis ​​​​que contêm o endereço do objeto em tipo hexadecimal que posteriormente é convertido para o sistema binário que basicamente é o endereço do objeto a ser armazenado na memória heap.



Variáveis ​​de referência que diferem dos tipos primitivos porque seu tamanho não pode ser calculado. Em Java, a variável de referência da classe Parent é capaz de conter sua referência de objeto, bem como sua referência de objeto filho. Vejamos os membros que não são métodos com a ajuda de um exemplo.

Exemplo:

Java
// Java Program to Demonstrate that Non-method Members // are Accessed according to Reference Type // (Unlike methods that are accessed according // to the referred object) // Class 1 // Super class class Parent {  int value = 1000;  // Constructor of super class  Parent()  {  // Print statement  System.out.println('Parent Constructor');  } } // Class 2 // Sub class class Child extends Parent {  int value = 10;  // Constructor of sub class  Child()  {  // Print statement  System.out.println('Child Constructor');  } } // Class 3 // Main class class GFG {  // Main driver method  public static void main(String[] args)  {  // Creating an object of sub class inside main()  // method  Child obj = new Child();  // Printing the reference of child type  System.out.println('Reference of Child Type :'  + obj.value);  // Note that doing 'Parent par = new Child()'  // would produce same result  Parent par = obj;  // Par holding obj will access the value  // variable of parent class  // Printing the reference of parent type  System.out.println('Reference of Parent Type : '  + par.value);  } } 

Saída
Parent Constructor Child Constructor Reference of Child Type :10 Reference of Parent Type : 1000

Explicação de saída: Se uma variável de referência pai estiver mantendo a referência da classe filha e tivermos a variável 'valor' nas classes pai e filha, ela se referirá à variável 'valor' da classe pai, independentemente de estar mantendo a referência do objeto da classe filha. A referência que contém a referência do objeto da classe filha não poderá acessar os membros (funções ou variáveis) da classe filha. Isso ocorre porque a variável de referência pai só pode acessar campos que estão na classe pai. Assim, o tipo de variável de referência decide qual versão do 'valor' será chamada e não o tipo de objeto que está sendo instanciado. Isso ocorre porque o compilador usa um mecanismo especial de polimorfismo em tempo de execução apenas para métodos. (Lá o tipo de objeto que está sendo instanciado decide qual versão do método será chamada).



Observação: É possível acessar membros de dados filhos usando ponteiro pai com conversão de tipo.