سؤال

لماذا يتم إنشاء فئات مجردة أو واجهة، أو متى يجب أن نستخدم فئات مجردة أو واجهة؟

هل كانت مفيدة؟

المحلول

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

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

و- تحرير - نسيت أن أذكر، ذكر Earwicker لي

وأخيرا، يمكنك تنفيذ العديد من الواجهات كما تريد، بل تمتد فئة واحدة فقط (وهي أنها مجردة أم لا). الحفاظ على ذلك في الاعتبار قبل اختيار.

نصائح أخرى

والفرق الرئيسي هو أنه يمكنك implement واجهات متعددة في الصف، ولكن extend سوى فئة مجردة واحدة. وذلك لأن فئة مجردة يمكن أيضا تحديد المجالات التي تقوم بتخزين البيانات، في حين أن واجهة لا يمكن.

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

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

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

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

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

ودعونا نأخذ مثالا.

public interface Friend {
void hello();
}

والآن لديك تعريف العقد الذي يقول أن أي الطبقة التي تريد تنفيذ Friend بحاجة إلى تقديم تعريف لطريقة hello().

وهنا هو تنفيذ:

public class myFriend implements Friend {
public void hello()
println("Done");
}

والآن myFriend قد أوفت العقد. والسؤال الآن هو: أين يجب أن تستخدم واجهات

واجهات تساعدك على تحديد السلوك الذي يجب أن تنفذ. نقول لديك فئة A التي تعرف بعض الوظائف. كنت ترغب في الفئات الأخرى لاستخدام هذه الوظيفة الدرجة إلا إذا كانت تحدد سلوك معين (الأساليب). يمكنك فرض هذا القيد في المدى من واجهة.

صامويل كاريجو يبدو أنه أجاب على هذا السؤال بشكل جيد.

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

ملحوظة هذا سبب الواجهات خاص بـ Java.

وتستخدم الطبقات الملخص عند بناء التسلسل الهرمي الميراث. ومع ذلك، لا ينبغي أن يكون معظم التسلسلات الهرمية الميراث جدا "العميق" (أي عدد كبير جدا من مستويات الميراث). وجوه المنحى العديد من الكتب تصميم واجهات صالح على الميراث (كتاب واحد قرأت ذات مرة نقلت مطور قوله ان "الميراث هو أروع واحد [وجوه المنحى] ميزة فلن تنفيذ")، وهذا يسمح الصفوف ليتم تعيين السلوكيات " من العقد "، حيث عقد هو واجهة.

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

وآمل أن يساعد هذا!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top