In C++ abbiamo tutti i metodi dei membri della classe come non virtuali. Per fare ciò dobbiamo utilizzare una parola chiave come prefisso noto come virtuale . Mentre in Java abbiamo tutti i metodi dei membri della classe come virtuali per impostazione predefinita. Per renderli non virtuali utilizziamo la parola chiave finale .
Le variabili di riferimento in Java sono fondamentalmente variabili che contengono l'indirizzo dell'oggetto in tipo esadecimale che successivamente viene convertito nel sistema binario che fondamentalmente è l'indirizzo dell'oggetto da archiviare nella memoria heap.
Le variabili di riferimento che differiscono dai tipi primitivi poiché la loro dimensione non può essere calcolata. In Java la variabile di riferimento della classe Parent è in grado di contenere il riferimento all'oggetto così come il riferimento all'oggetto figlio. Vediamo i membri non-metodo con l'aiuto di un esempio.
come controllare i numeri bloccati su Android
Esempio:
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); } }
Produzione
Parent Constructor Child Constructor Reference of Child Type :10 Reference of Parent Type : 1000
Spiegazione dell'uscita: Se una variabile di riferimento genitore contiene il riferimento della classe figlia e abbiamo la variabile 'valore' sia nella classe genitore che in quella figlia, farà riferimento alla variabile 'valore' della classe genitore se contiene il riferimento all'oggetto della classe figlia. Il riferimento che contiene il riferimento all'oggetto della classe figlia non sarà in grado di accedere ai membri (funzioni o variabili) della classe figlia. Questo perché la variabile di riferimento genitore può accedere solo ai campi che si trovano nella classe genitore. Pertanto il tipo di variabile di riferimento decide quale versione di "valore" verrà chiamata e non il tipo di oggetto di cui si sta istanziando. Ciò avviene perché il compilatore utilizza uno speciale meccanismo di polimorfismo in fase di esecuzione solo per i metodi. (Qui il tipo di oggetto da istanziare decide quale versione del metodo chiamare).
Nota: È reso possibile accedere ai membri dati figlio utilizzando il puntatore genitore con typecasting.