logo

Clases padre e hijo que tienen el mismo miembro de datos en Java

En C++ tenemos todos los métodos de los miembros de la clase como no virtuales. Para ello tenemos que utilizar una palabra clave como prefijo conocida como virtual . Mientras que en Java tenemos todos los métodos de los miembros de la clase como virtuales de forma predeterminada. Para hacerlos no virtuales usamos la palabra clave final .

Las variables de referencia en Java son básicamente variables que contienen la dirección del objeto en tipo hexadecimal que luego se convierte al sistema binario que básicamente es la dirección del objeto que se almacenará en la memoria del montón.



Las variables de referencia que se diferencian de los tipos primitivos en que su tamaño no se pueden calcular. En Java, la variable de referencia de la clase principal es capaz de contener su referencia de objeto así como su referencia de objeto secundario. Veamos los miembros que no son del método con la ayuda de un ejemplo.

Ejemplo:

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);  } } 

Producción
Parent Constructor Child Constructor Reference of Child Type :10 Reference of Parent Type : 1000

Explicación de salida: Si una variable de referencia principal contiene la referencia de la clase secundaria y tenemos la variable 'valor' tanto en la clase principal como en la secundaria, se referirá a la variable 'valor' de la clase principal si contiene una referencia de objeto de clase secundaria. La referencia que contiene la referencia del objeto de clase secundaria no podrá acceder a los miembros (funciones o variables) de la clase secundaria. Esto se debe a que la variable de referencia principal solo puede acceder a campos que están en la clase principal. Por lo tanto, el tipo de variable de referencia decide qué versión de 'valor' se llamará y no el tipo de objeto del que se crea una instancia. Esto se debe a que el compilador utiliza un mecanismo de polimorfismo de tiempo de ejecución especial solo para los métodos. (Allí, el tipo de objeto del que se crea una instancia decide qué versión del método se llamará).



Nota: Es posible acceder a miembros de datos secundarios utilizando el puntero principal con encasillamiento.