Батьки та дитячі заняття, що мають одного члена даних на Java

У C ++ у нас є всі методи членів класу як невіртуальні. Для того, щоб зробити, щоб ми повинні використовувати ключове слово як префікс, відомий як віртуальний . Тоді як у Java ми маємо всі методи членів класу як віртуальні за замовчуванням. Для того, щоб зробити їх невіртуальними, ми використовуємо ключове слово остаточний .

Довідкові змінні на Java - це в основному змінні, що містять адресу об'єкта в шістнадцятковому типі, який пізніше перетворюється на бінарну систему, яка в основному є адресою об'єкта, що зберігається на пам'яті купи.

Довідкові змінні, які відрізняються від примітивних типів, оскільки їх розмір не можна обчислити. У Java еталонна змінна батьківського класу здатна утримувати свою довідку про об'єкт, а також посилання на дочірні об'єкти. Давайте подивимось про членів, які не є методом, за допомогою прикладу.

Приклад:

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

Випуск
Parent Constructor Child Constructor Reference of Child Type :10 Reference of Parent Type : 1000 

Виведення пояснення: Якщо батьківська довідкова змінна містить посилання на дочірній клас, і ми маємо змінну "значення" як у батьківському, так і в дитячому класі, вона буде посилатися на змінну "значення батьківського класу", чи вона має посилання на об'єкт дочірнього класу. Довідка, що містить посилання на об'єкт дочірнього класу, не зможе отримати доступ до членів (функцій або змінних) дочірнього класу. Це пояснюється тим, що батьківська довідкова змінна може отримати доступ лише до полів, які знаходяться у батьківському класі. Таким чином, тип еталонної змінної вирішує, яку версію "значення" буде називатися, а не тип об'єкта. Це тому, що компілятор використовує спеціальний механізм поліморфізму часу виконання лише для методів. (Там тип об'єкта, який миттєво підтримується, вирішує, яку версію методу називатись).

Примітка: Зрозуміло, що можна отримати доступ до членів даних дітей за допомогою батьківського покажчика з типовим засобом.