Clases primarias y secundarias que tienen el mismo miembro de datos en Java

En C++ tenemos todos los métodos de miembros de clase como no virtuales. Para hacerlo, tenemos que usar una palabra clave como prefijo conocida como virtual . Mientras que en Java, tenemos todos los métodos de miembros de 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.

Variables de referencia que difieren de los tipos primitivos porque no se puede calcular su tamaño. 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 de «valor» de la clase principal, ya sea que contenga la clase secundaria referencia de objeto La referencia que contiene la referencia del objeto de la 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 los campos que se encuentran 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 que se instancia. Es porque el compilador usa un mecanismo especial de polimorfismo en tiempo de ejecución solo para métodos. (Allí, el tipo de objeto que se instancia decide qué versión del método se llamará).

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

Este artículo es una contribución de Twinkle Tyagi . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *