logo

جافا توسيع فئات متعددة

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

توسيع فئات متعددة في جافا

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

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

كيفية إنشاء مصفوفة في جافا

توسيع فئات متعددة في جافا

في هذا المثال، سنقوم بإنشاء ثلاث فئات: الحيوان والثدييات والزواحف. سنقوم بعد ذلك بإنشاء واجهة تسمى Omnivore، والتي ستعمل على توسيع فئات الحيوانات والثدييات. وأخيرًا، سنقوم بإنشاء فئة تسمى Platypus، والتي ستقوم بتنفيذ واجهة Omnivore.

ستحتوي فئة الحيوان على طريقة تسمى 'تناول الطعام' والتي تطبع عبارة 'الحيوان يأكل'. ستعمل فئة الثدييات على توسيع فئة الحيوانات وستحتوي على طريقة تسمى 'drinkMilk' التي تطبع عبارة 'الثدييات تشرب الحليب'. ستعمل فئة الزواحف أيضًا على توسيع فئة الحيوانات وتحتوي على طريقة تسمى 'layEggs' التي تطبع عبارة 'الزواحف تضع البيض'.

إليك رمز فئة الحيوان:

 public class Animal { public void eat() { System.out.println('Animal is eating.'); } } 

إليك رمز فئة الثدييات:

 public class Mammal extends Animal { public void drinkMilk() { System.out.println('Mammal is drinking milk.'); } } 

إليك رمز فئة الزواحف:

المصفوفات جافا
 public class Reptile extends Animal { public void layEggs() { System.out.println('Reptile is laying eggs.'); } } 

لنقم الآن بإنشاء واجهة Omnivore، والتي ستعمل على توسيع فئات الحيوانات والثدييات:

 public interface Omnivore extends Animal, Mammal { public void eatPlants(); } 

أخيرًا، لنقم بإنشاء فئة Platypus، والتي ستقوم بتنفيذ واجهة Omnivore:

 public class Platypus implements Omnivore { public void eat() { System.out.println('Platypus is eating.'); } public void drinkMilk() { System.out.println('Platypus is drinking milk.'); } public void eatPlants() { System.out.println('Platypus is eating plants.'); } } 

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

لنختبر برنامجنا عن طريق إنشاء نسخة من فئة Platypus واستدعاء أساليبها:

تحويل السلسلة إلى interger
 public class Main { public static void main(String[] args) { Platypus p = new Platypus(); p.eat(); p.drinkMilk(); p.eatPlants(); } } 

انتاج:

 Platypus is eating. Platypus is drinking milk. Platypus is eating plants. 

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

متى يتم استخدام السلوك المشابه للوراثة المتعددة في Java

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

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

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