الميراث في Java (مع مثال)
ما هو الميراث؟
وراثة هي آلية تكتسب فيها فئة ما ملكية فئة أخرى. على سبيل المثال، يرث الطفل سمات والديه. من خلال الميراث، يمكننا إعادة استخدام حقول وأساليب الفئة الموجودة. ومن ثم، فإن الميراث يسهل إعادة الاستخدام وهو مفهوم مهم في OOPs.
ما هو الميراث في Java?
Java وراثة هي آلية تكتسب فيها فئة ما ملكية فئة أخرى. في Javaعند وجود علاقة "Is-A" بين فئتين، نستخدم الميراث. تسمى الفئة الأصلية بالفئة الفائقة والفئة الموروثة تسمى بالفئة الفرعية. الكلمة الرئيسية extends
يتم استخدامه بواسطة الفئة الفرعية لوراثة ميزات الفئة العليا. يعد الوراثة أمرًا مهمًا لأنه يؤدي إلى إمكانية إعادة استخدام الكود.
Java بناء جملة الميراث:
class subClass extends superClass { //methods and fields }
أنواع الميراث في Java
فيما يلي أنواع مختلفة من الميراث في Java:
- الميراث الواحد
- وراثة متعددة
- الوراثة متعددة المستويات
- الوراثة الهرمية
- الوراثة الهجينة
1. الميراث الفردي:
في الوراثة الفردية، يقوم فصل واحد بتوسيع فئة أخرى (فئة واحدة فقط).
في الرسم البياني أعلاه، تمتد الفئة B فقط إلى الفئة A. والفئة A هي فئة فائقة والفئة B هي فئة فرعية.
2. الميراث المتعدد:
الميراث المتعدد هو أحد الميراث في Java الأنواع التي يمتد فيها صنف واحد إلى أكثر من صنف واحد. Java لا يدعم الميراث المتعدد.
وفقًا للرسم البياني أعلاه، فإن الفئة C تمتد إلى الفئة A والفئة B معًا.
3. الميراث متعدد المستويات:
في الوراثة متعددة المستويات، يمكن لفئة واحدة أن ترث من فئة مشتقة. ومن ثم تصبح الفئة المشتقة هي الفئة الأساسية للفئة الجديدة.
كما هو موضح في الرسم البياني، الفئة C هي فئة فرعية من الفئة B وB هي فئة فرعية من الفئة A.
4. الميراث الهرمي:
في الميراث الهرمي، يتم توريث فئة واحدة من قبل العديد من الفئات الفرعية.
وفقًا للمثال أعلاه، ترث الفئات B وC وD نفس الفئة A.
5. الميراث الهجين:
الميراث الهجين هو أحد أنواع الميراث في Java وهو مزيج من الميراث الفردي والمتعدد.
وفقًا للمثال أعلاه، يتم توريث جميع الأعضاء العامين والمحميين من الفئة "أ" إلى الفئة "د"، أولاً عبر الفئة "ب" وثانيًا عبر الفئة "ج".
ملحوظة: Java لا يدعم الميراث الهجين/المتعدد
الميراث في Java مثال
هنا مثال على الميراث في Java:
class Doctor { void Doctor_Details() { System.out.println("Doctor Details..."); } } class Surgeon extends Doctor { void Surgeon_Details() { System.out.println("Surgen Detail..."); } } public class Hospital { public static void main(String args[]) { Surgeon s = new Surgeon(); s.Doctor_Details(); s.Surgeon_Details(); } }
سوبر الكلمة الرئيسية
إن الكلمة الرئيسية super تشبه الكلمة الرئيسية "this". يمكن استخدام الكلمة الرئيسية super للوصول إلى أي عنصر بيانات أو طرق للفئة الأصلية. يمكن استخدام الكلمة الرئيسية Super في متغيروالطريقة ومستوى المنشئ.
بناء الجملة:
super.<method-name>();
تحقق أيضا: - هذه الكلمة الرئيسية في Java: ما هو وكيفية استخدامه مع المثال
تعلم الميراث في OOP مع المثال
النظر في نفس التطبيق المصرفي من المثال السابق.
من المفترض أن نفتح نوعين مختلفين من الحسابات، أحدهما للادخار والآخر للحساب الجاري (المعروف أيضًا باسم الحساب الجاري).
دعونا نقارن وندرس كيف يمكننا التعامل مع البرمجة من منظور البرمجة المنظم والموجه للكائنات.
النهج الهيكلي: في البرمجة المنظمة، سوف نقوم بإنشاء وظيفتين –
- واحد للانسحاب
- والآخر لإجراء الإيداع.
نظرًا لأن عمل هذه الوظائف يظل كما هو عبر الحسابات.
نهج OOP: أثناء استخدام وجه الفتاة نهج البرمجة. سوف نقوم بإنشاء فئتين.
- ولكل منها تنفيذ وظائف الإيداع والسحب.
- سيؤدي هذا إلى الاستغناء عن العمل الإضافي.
تغيير الطلب في البرمجيات
يوجد الآن تغيير في مواصفات المتطلبات لشيء شائع جدًا في صناعة البرمجيات. من المفترض أن تضيف وظيفة الحساب المصرفي المميز مع تسهيلات السحب على المكشوف. كخلفية، السحب على المكشوف هو تسهيل يمكنك من خلاله سحب مبلغ يزيد عن الرصيد المتاح في حسابك.
النهج الهيكلي: باستخدام النهج الوظيفي، لا بد لي من تعديل وظيفة السحب الخاصة بي، والتي تم اختبارها بالفعل وتحديد خطها الأساسي. وإضافة طريقة مثل أدناه ستهتم بالمتطلبات الجديدة.
نهج OOP: باستخدام نهج OOP، تحتاج فقط إلى كتابة فئة جديدة مع تنفيذ فريد لوظيفة السحب. لم نلمس أبدًا قطعة التعليمات البرمجية التي تم اختبارها.
طلب تغيير آخر
ماذا لو تغير الشرط أكثر؟ ترغب في إضافة حساب بطاقة الائتمان مع متطلبات الودائع الفريدة الخاصة به.
النهج الهيكلي: باستخدام النهج الهيكلي، يتعين عليك تغيير جزء رمز الإيداع الذي تم اختباره مرة أخرى.
نهج OOP:ولكن باستخدام نهج موجه للكائنات، ستقوم فقط بإنشاء فئة جديدة بتنفيذها الفريد لطريقة الإيداع (المميزة باللون الأحمر في الصورة أدناه). لذا، على الرغم من أن البرمجة الهيكلية تبدو وكأنها نهج سهل في البداية، إلا أن البرمجة الموجهة للكائنات تفوز على المدى الطويل.
مزايا الميراث في OOPs
ولكن يمكن للمرء أن يجادل بأنه في جميع الفئات، لديك أجزاء متكررة من التعليمات البرمجية.
للتغلب على هذه المشكلة، يمكنك إنشاء فئة رئيسية، مثل "account" وتنفيذ نفس وظيفة الإيداع والسحب. وجعل الفئات الفرعية ترث فئة "account". بحيث يكون لديها إمكانية الوصول إلى وظائف السحب والإيداع في فئة الحساب. لا يلزم تنفيذ الوظائف بشكل فردي. هذا هو الميراث في جافا .