Vanhempien ja lasten luokilla on sama tietojäsen Javassa

C ++: ssa meillä kaikilla luokan jäsenmenetelmillä ei ole virtuaalisia. Jotta voimme tehdä, meidän on käytettävä avainsanaa etuliitteenä, joka tunnetaan nimellä virtuaali- . Javassa meillä on kaikki luokan jäsenmenetelmät oletuksena virtuaalina. Jotta ne olisivat ei-virtuaalisia, käytämme avainsanaa lopullinen .

Java -viitemuuttujat ovat pohjimmiltaan muuttujia, jotka pitävät heksadesimaalisessa objektin osoitetta, joka myöhemmin muunnetaan binaariseksi järjestelmään, joka on periaatteessa kasanmuistiin tallennetun objektin osoite.

Vertailumuuttujia, jotka eroavat primitiivisistä tyypeistä, koska niiden kokoa ei voida laskea. Java -luokan viitemuuttuja pystyy pitämään objektiviitteensä sekä lapsen objektin viitteen. Katsotaanpa ei-menetelmyyjistä esimerkin avulla.

Esimerkki:

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

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

Lähtö selitys: Jos vanhempien vertailumuuttuja pitää lapsiluokan viitteet ja meillä on 'arvo' -muuttuja sekä vanhemmassa että lastenluokassa, se viittaa vanhemman luokan 'arvo' -muuttujaan, onko siinä lasten luokan objektiviite. Lapsiluokan objektiviiteviittaus ei pääse lapsiluokan jäseniin (toimintoihin tai muuttujiin). Tämä johtuu siitä, että vanhempien referenssimuuttuja voi käyttää vain vanhempien luokassa olevia kenttiä. Siten viitemuuttujan tyyppi päättää, mitä arvoa 'arvoa' kutsutaan, eikä objektin tyyppiä. Se johtuu siitä, että kääntäjä käyttää erityistä ajoajan polymorfismimekanismia vain menetelmiin. (Siinämuotoilun tyyppi päättää, mitä menetelmän versiota kutsutaan).

Huomaa: Lapsitietojen jäsenten on mahdollista käyttää vanhempien osoitinta käyttämällä tyyppityöntekijöitä.