Übergeordnete und untergeordnete Klassen mit demselben Datenelement in Java

In C++ haben wir alle Klassenmitgliedsmethoden als nicht virtuell. Um dies zu erreichen, müssen wir ein Schlüsselwort als Präfix verwenden, das als bekannt ist virtuell . In Java hingegen sind alle Methoden der Klassenmitglieder standardmäßig virtuell. Um sie nicht virtuell zu machen, verwenden wir das Schlüsselwort Finale .

Referenzvariablen in Java sind im Grunde Variablen, die die Adresse des Objekts im Hexadezimaltyp enthalten, die später in das Binärsystem konvertiert wird, das im Grunde die Adresse des Objekts ist, das im Heap-Speicher gespeichert werden soll.

Referenzvariablen, die sich durch ihre Größe von primitiven Typen unterscheiden, können nicht berechnet werden. In Java kann die Referenzvariable der übergeordneten Klasse sowohl ihre Objektreferenz als auch ihre untergeordnete Objektreferenz enthalten. Sehen wir uns anhand eines Beispiels etwas über Nicht-Methodenmitglieder an.

Beispiel:

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

Ausgabe
Parent Constructor Child Constructor Reference of Child Type :10 Reference of Parent Type : 1000 

Ausgabeerklärung: Wenn eine übergeordnete Referenzvariable die Referenz der untergeordneten Klasse enthält und wir die Variable „Wert“ sowohl in der übergeordneten als auch in der untergeordneten Klasse haben, verweist sie auf die Variable „Wert“ der übergeordneten Klasse, unabhängig davon, ob sie die Objektreferenz der untergeordneten Klasse enthält. Die Referenz, die die Objektreferenz der untergeordneten Klasse enthält, kann nicht auf die Mitglieder (Funktionen oder Variablen) der untergeordneten Klasse zugreifen. Dies liegt daran, dass die übergeordnete Referenzvariable nur auf Felder zugreifen kann, die sich in der übergeordneten Klasse befinden. Somit entscheidet der Typ der Referenzvariablen, welche Version von „Wert“ aufgerufen wird, und nicht der Typ des Objekts, das instanziiert wird. Dies liegt daran, dass der Compiler nur für Methoden einen speziellen Laufzeitpolymorphismusmechanismus verwendet. (Dort entscheidet der Typ des instanziierten Objekts, welche Version der Methode aufgerufen werden soll.)

Notiz: Der Zugriff auf untergeordnete Datenelemente mithilfe eines übergeordneten Zeigers mit Typumwandlung ist möglich.