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.