logo

الميراث في جاوة

  1. ميراث
  2. أنواع الميراث
  3. لماذا لا يمكن الوراثة المتعددة في Java في حالة الفصل؟

الميراث في جاوة هي آلية يكتسب فيها كائن واحد جميع خصائص وسلوكيات الكائن الأصلي. إنه جزء مهم من أُووبس (نظام البرمجة الشيئية).

الفكرة وراء الميراث في Java هي أنه يمكنك إنشاء كائنات جديدة الطبقات التي بنيت على الطبقات الموجودة. عندما ترث من فئة موجودة، يمكنك إعادة استخدام أساليب وحقول الفئة الأصلية. علاوة على ذلك، يمكنك إضافة أساليب وحقول جديدة في صفك الحالي أيضًا.

يمثل الميراث علاقة IS-A والذي يُعرف أيضًا باسم أ الوالدين والطفل علاقة.

لماذا استخدام الميراث في جافا

المصطلحات المستخدمة في الميراث

    فصل:الفئة هي مجموعة من الكائنات التي لها خصائص مشتركة. إنه قالب أو مخطط يتم إنشاء الكائنات منه.الفئة الفرعية/فئة الطفل:الفئة الفرعية هي فئة ترث الفئة الأخرى. ويسمى أيضًا فئة مشتقة أو فئة موسعة أو فئة فرعية.الفئة الفائقة/فئة الوالدين:Superclass هي الفئة التي ترث منها الفئة الفرعية الميزات. ويطلق عليها أيضًا فئة أساسية أو فئة أصل.إعادة الاستخدام:كما يشير الاسم، فإن إعادة الاستخدام هي آلية تسهل عليك إعادة استخدام حقول وأساليب الفئة الموجودة عند إنشاء فئة جديدة. يمكنك استخدام نفس الحقول والأساليب المحددة بالفعل في الفصل السابق.

بناء جملة جافا الميراث

 class Subclass-name extends Superclass-name { //methods and fields } 

ال يمتد الكلمة الرئيسية يشير إلى أنك تقوم بإنشاء فئة جديدة مشتقة من فئة موجودة. معنى 'يمتد' هو زيادة الوظيفة.

في مصطلحات Java، تسمى الفئة الموروثة الأصل أو الفئة الفائقة، وتسمى الفئة الجديدة الطفل أو الفئة الفرعية.


مثال على وراثة جافا

الميراث في جاوة

كما هو موضح في الشكل أعلاه، المبرمج هو الفئة الفرعية والموظف هو الفئة الفائقة. العلاقة بين الفئتين هي مبرمج IS-A موظف . وهذا يعني أن المبرمج هو نوع من الموظفين.

 class Employee{ float salary=40000; } class Programmer extends Employee{ int bonus=10000; public static void main(String args[]){ Programmer p=new Programmer(); System.out.println('Programmer salary is:'+p.salary); System.out.println('Bonus of Programmer is:'+p.bonus); } } 
اختبره الآن
 Programmer salary is:40000.0 Bonus of programmer is:10000 

في المثال أعلاه، يمكن لكائن المبرمج الوصول إلى حقل الفئة الخاصة وكذلك فئة الموظف، أي إمكانية إعادة استخدام التعليمات البرمجية.


أنواع الميراث في جافا

على أساس الطبقة، يمكن أن يكون هناك ثلاثة أنواع من الميراث في جافا: واحد، متعدد المستويات والتسلسل الهرمي.

في برمجة جافا، يتم دعم الميراث المتعدد والهجين من خلال الواجهة فقط. سنتعرف على الواجهات لاحقًا.

أنواع الميراث في جاوة

ملاحظة: الوراثة المتعددة غير مدعومة في Java من خلال الفصل.

عندما يرث فصل واحد عدة فئات، يُعرف ذلك بالوراثة المتعددة. على سبيل المثال:

الوراثة المتعددة في جافا

مثال الميراث واحد

عندما يرث فصل فئة أخرى، فإنه يعرف باسم ميراث واحد . في المثال الموضح أدناه، ترث فئة الكلاب فئة الحيوان، لذلك يكون هناك وراثة واحدة.

الملف: TestInheritance.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class TestInheritance{ public static void main(String args[]){ Dog d=new Dog(); d.bark(); d.eat(); }} 

انتاج:

 barking... eating... 

مثال الميراث متعدد المستويات

وعندما تكون هناك سلسلة من الميراث، فإنها تعرف باسم وراثة متعددة المستويات . كما ترون في المثال الموضح أدناه، ترث فئة BabyDog فئة الكلاب التي ترث مرة أخرى فئة الحيوان، لذلك هناك وراثة متعددة المستويات.

الملف: TestInheritance2.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class BabyDog extends Dog{ void weep(){System.out.println('weeping...');} } class TestInheritance2{ public static void main(String args[]){ BabyDog d=new BabyDog(); d.weep(); d.bark(); d.eat(); }} 

انتاج:

 weeping... barking... eating... 

مثال الميراث الهرمي

عندما ترث فئتان أو أكثر فئة واحدة، يُعرف ذلك باسم الميراث الهرمي . في المثال الموضح أدناه، ترث فئتي Dog وCat فئة Animal، لذلك يوجد وراثة هرمية.

الملف: TestInheritance3.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class Cat extends Animal{ void meow(){System.out.println('meowing...');} } class TestInheritance3{ public static void main(String args[]){ Cat c=new Cat(); c.meow(); c.eat(); //c.bark();//C.T.Error }} 

انتاج:

 meowing... eating... 

س) لماذا لا يتم دعم الميراث المتعدد في جافا؟

لتقليل التعقيد وتبسيط اللغة، لا يتم دعم الميراث المتعدد في Java.

فكر في سيناريو تكون فيه A وB وC ثلاث فئات. ترث الفئة C الفئتين A وB. إذا كانت الفئتان A وB لهما نفس الطريقة وقمت باستدعائها من كائن فئة فرعية، فسيكون هناك غموض في استدعاء طريقة الفئة A أو B.

أجمل ابتسامة في العالم

نظرًا لأن أخطاء وقت الترجمة أفضل من أخطاء وقت التشغيل، فإن Java تعرض خطأ وقت الترجمة إذا ورثت فئتين. لذلك سواء كان لديك نفس الطريقة أو مختلفة، سيكون هناك خطأ في وقت الترجمة.

 class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were public static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } } 
اختبره الآن
 Compile Time Error