فصول الوالدين والطفل لها نفس عضو البيانات في 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 

شرح الإخراج: إذا كان المتغير المرجعي الأصل يحتفظ بمرجع الفئة الفرعية ولدينا متغير "القيمة" في كل من الفئتين الأصلية والفرعية، فسوف يشير إلى متغير "القيمة" للفئة الأصلية سواء كان يحتفظ بمرجع كائن الفئة الفرعية. لن يتمكن المرجع الذي يحمل مرجع كائن الفئة الفرعية من الوصول إلى أعضاء (وظائف أو متغيرات) الفئة الفرعية. وذلك لأن المتغير المرجعي الأصل يمكنه الوصول فقط إلى الحقول الموجودة في الفئة الأصل. وبالتالي فإن نوع المتغير المرجعي هو الذي يحدد إصدار "القيمة" الذي سيتم استدعاؤه وليس نوع الكائن الذي سيتم إنشاء مثيل له. وذلك لأن المترجم يستخدم آلية تعدد الأشكال الخاصة في وقت التشغيل فقط للطرق. (هناك يحدد نوع الكائن الذي يتم إنشاء مثيل له إصدار الطريقة التي سيتم استدعاؤها).

ملحوظة: أصبح من الممكن الوصول إلى أعضاء بيانات الأطفال باستخدام المؤشر الأصلي مع التلبيس.