Classes parent et enfant ayant le même membre de données en Java

En C++, toutes les méthodes membres de classe sont non virtuelles. Pour ce faire, nous devons utiliser un mot-clé comme préfixe appelé virtuel . Alors qu'en Java, toutes les méthodes membres de la classe sont virtuelles par défaut. Afin de les rendre non virtuels, nous utilisons le mot-clé final .

Les variables de référence en Java sont essentiellement des variables contenant l'adresse de l'objet en type hexadécimal qui est ensuite convertie en système binaire qui est essentiellement l'adresse de l'objet à stocker dans la mémoire tas.

Les variables de référence qui diffèrent des types primitifs par leur taille ne peuvent pas être calculées. En Java, la variable de référence de la classe Parent est capable de contenir sa référence d'objet ainsi que sa référence d'objet enfant. Voyons les membres non-méthode à l'aide d'un exemple.

Exemple:

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

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

Explication de la sortie : Si une variable de référence parent contient la référence de la classe enfant et que nous avons la variable « valeur » dans la classe parent et la classe enfant, elle fera référence à la variable « valeur » de la classe parent si elle contient la référence d'objet de classe enfant. La référence contenant la référence de l’objet de la classe enfant ne pourra pas accéder aux membres (fonctions ou variables) de la classe enfant. En effet, la variable de référence parent ne peut accéder qu'aux champs de la classe parent. Ainsi, le type de variable de référence décide quelle version de « valeur » sera appelée et non le type d'objet instancié. En effet, le compilateur utilise un mécanisme de polymorphisme d'exécution spécial uniquement pour les méthodes. (Là, le type d'objet instancié décide quelle version de la méthode doit être appelée).

Note: Il est possible d'accéder aux données membres enfants à l'aide du pointeur parent avec transtypage.