Foreldre- og barneklasser som har samme datamedlem i Java

I C ++ har vi alle klassemedlemmer som ikke-virtuelle. For å lage slik at vi må bruke et nøkkelord som et prefiks kjent som virtuell . Mens vi i Java har alle klassemedlemmer som virtuelle som standard. For å gjøre dem ikke-virtuelle bruker vi nøkkelordet Endelig .

Referansevariabler i Java er i utgangspunktet variabler som holder adressen til objektet i heksadesimal type som senere blir konvertert til det binære systemet som i utgangspunktet er adressen til objektet som skal lagres på heapminnet.

Referansevariabler som skiller seg fra primitive typer da størrelsen ikke kan beregnes. I Java er referansevariabelen til foreldreklassen i stand til å holde sin objektreferanse så vel som sin barneobjektreferanse. La oss se om ikke-metodemedlemmer ved hjelp av et eksempel.

Eksempel:

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

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

Utgang Forklaring: Hvis en foreldrereferansevariabel holder referansen til barneklassen og vi har "Verdi" -variabelen i både foreldre- og barneklassen, vil den referere til foreldreklassen 'Value' -variabelen om den holder barneklasseobjektreferanse. Henvisningen som holder Child Class Object Reference vil ikke kunne få tilgang til medlemmene (funksjoner eller variabler) i barneklassen. Dette er fordi foreldrereferansevariabelen bare kan få tilgang til felt som er i foreldreklassen. Dermed bestemmer typen referansevariabel hvilken versjon av 'verdi' som vil bli kalt og ikke typen objekt som blir instantiert. Det er fordi kompilatoren bruker en spesiell polymorfismemekanisme bare for metoder. (Der bestemmer den typen objekt som blir instantiert hvilken versjon av metoden som skal kalles).

Note: Det er muliggjort å få tilgang til barnedatamedlemmer ved hjelp av overordnet peker med typecasting.