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.