logo

Classi padre e figlio con lo stesso membro dati in Java

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.