تستخدم برامج Java فئات مجردة لتنفيذ المفاهيم المجردة في الطبيعة. تتمثل وظيفة الفئة المجردة في تنظيم العديد من الفئات المرتبطة معًا لتوفير فئة مشتركة، أي فئة مجردة، وسيتم اشتقاق الفئات المحددة التي تنظمها منها كفئات فرعية لها. تميز الطبقة المجردة السلوك العام وتنقله إلى الفئات المشتقة منها من خلال آلية الميراث. تسمى الأساليب المحددة في الفئات المجردة بالطرق المجردة. تحتوي هذه الأساليب فقط على إعلان رأس الطريقة، وتستخدم فاصلة منقوطة لاستبدال تعريف نص الطريقة، أي أنه يتم تعريف نموذج الواجهة لأسلوب العضو فقط دون عمليات محددة. . فقط إعادة تعريف أساليب الأعضاء المجردة بواسطة فئة مشتقة هي التي تنفذ فعليًا العمليات المتعلقة بالفئة المشتقة.
بعد أن ترث كل فئة فرعية الطريقة المجردة للفئة الأصلية، فإنها تعيد تعريفها باستخدام عبارات وأجسام طرق مختلفة، وتشكل عدة فئات فرعية بنفس الاسم، ونفس قيمة الإرجاع، ونفس قائمة المعلمات، لنفس الغرض ولكن بعض الاختلافات المحددة طريقة التنفيذ. الغرض من تحديد الأساليب المجردة في فئة مجردة هو تنفيذ واجهة، أي أن جميع الفئات الفرعية تقدم طريقة بنفس الاسم للعالم الخارجي. الفئة المجردة عبارة عن مجموعة من السمات العامة لجميع فئاتها الفرعية وفئة تحتوي على طريقة مجردة واحدة أو أكثر. إحدى المزايا الرائعة لاستخدام الفئات المجردة هي أنه يمكنك الاستفادة الكاملة من هذه الخصائص العامة لتحسين كفاءة تطوير البرامج وصيانتها. القيود المفروضة على الفئات المجردة والأساليب المجردة هي كما يلي:
(1) تسمى أي فئة تم تعديلها باستخدام المعدل المجرد فئة مجردة. تسمى أي طريقة عضو تم تعديلها باستخدام المعدل المجرد طريقة مجردة.
(2) يمكن أن تحتوي الفئة المجردة على صفر أو أكثر من الأساليب المجردة، أو يمكن أن تحتوي أيضًا على أساليب غير مجردة.
(3) ليست هناك حاجة للطرق المجردة في الفصول المجردة، ولكن الفصول ذات الأساليب المجردة يجب أن تكون فئات مجردة.
(4) بالنسبة للطرق المجردة، يتم تحديد اسم الطريقة ونوعها فقط في الفئة المجردة دون كتابة رمز التنفيذ الخاص بها.
(5) يمكن للفئة المجردة اشتقاق فئات فرعية، ويجب تنفيذ جميع الأساليب المجردة المحددة في الفئة المجردة في الفئات الفرعية المشتقة من الفئة المجردة.
(6) لا يمكن للفئات المجردة إنشاء كائنات. يتم تنفيذ عمل إنشاء الكائنات بواسطة فئات فرعية مشتقة من فئات مجردة.
(7) إذا كانت هناك طريقة مجردة بنفس الاسم في الفئة الأصلية، فلا يمكن أن تكون هناك طريقة مجردة أخرى بنفس الاسم في الفئة الفرعية.
(8) لا يمكن للملخص تعديل نفس الفصل بالتوازي مع الفصل النهائي.
(9) لا يمكن استخدام الملخص لتعديل نفس الطريقة بالتوازي مع الطريقة الخاصة أو الثابتة أو النهائية أو الأصلية.
تنص لغة Java على أنه عندما يكون لدى الفصل طريقة مجردة، يجب الإعلان عن الفصل كفئة مجردة.
عندما ترث فئة فرعية من فئة أصلية، إذا كانت هناك طرق مجردة في الفئة الأصلية، وتشعر الفئة الفرعية أنها تستطيع تنفيذ جميع الطرق المجردة للفئة الأصلية، فيجب على الفئة الفرعية تنفيذ جميع الطرق المجردة للفئة الأصلية، مثل:
/** * ترث فئة الكلب الفرعية فئة الحيوان المجردة وتنفذ الطريقة المجردة للاستمتاع * @author gacl * */class Dog Extends Animal { /** * تضيف فئة الكلب سماتها الفريدة */ public String furColor public Dog ( String n, String c) { super(n);// اتصل بمنشئ الفئة الأصلية Animal this.furColor = c; } @Override public void Enjoy() { System.out.println("الكلب ينبح.. ..")؛ }}
إذا كان لا يمكن تنفيذ الطريقة المجردة في الفئة الأصلية بواسطة الفئة الفرعية، فقم بإعلان الفئة الفرعية كفئة مجردة، مثل:
/** * ترث الفئة الفرعية Cat هنا من فئة Animal المجردة، وترث بشكل طبيعي الطريقة المجردة Enjoy() المعلنة في فئة Animal * ومع ذلك، تشعر الفئة الفرعية Cat أنه ليس من المناسب تنفيذ طريقة Enjoy() هذه نفسها، لذلك تعلن عن نفسها كفئة مجردة، * فمن ينفذ طريقة الاستمتاع المجردة هذه، ومن يرث فئة فرعية، فمن ينفذ هذه الطريقة المجردة يستمتع (). * @author gacl * */abstract class Cat Extends Animal { /** * تضيف Cat سماتها الفريدة*/ public StringeyeColor; public Cat(String n, String c) { super(n);// اتصل بالفئة الأصلية طريقة بناء الحيوان this.eyeColor = c }};
ترث الفئة الفرعية Cat هنا من فئة Animal المجردة، وترث بشكل طبيعي الطريقة المجردة Enjoy() المعلنة في فئة Animal، ومع ذلك، تشعر الفئة الفرعية Cat أنه ليس من المناسب تنفيذ طريقة Enjoy() هذه بمفردها، لذلك يطلق على نفسه مُعلن كفئة مجردة، فمن ينفذ طريقة الاستمتاع المجردة، ومن يرث الفئة الفرعية، يقوم بتنفيذ الطريقة المجردة استمتع (). يحب:
/** * ترث الفئة الفرعية BlueCat الفئة المجردة Cat وتنفذ الطريقة المجردة للاستمتاع الموروثة من الفئة الأصلية Cat * @author gacl * */class BlueCat Extends Cat { public BlueCat(String n, String c) { super(n , c); } /** * تنفيذ الطريقة المجردة للاستمتاع */ @Override public void Enjoy() { System.out.println("القط الأزرق مواء...");
رمز الاختبار الكامل هو كما يلي:
package javastudy.summary;/** * فئة الأصل Animal * أضف ملخصًا أمام الفصل، أي أعلنه على النحو التالي: فئة مجردة Animal * بهذه الطريقة، تصبح فئة Animal فئة مجردة */abstract class Animal { public String name; public Animal(String name) { this.name = name } /** * الطريقة المجردة * يوجد تعريف فقط للطريقة، ولكن لا يوجد تطبيق لها. */ public Abstract void Enjoy(); }/** * ترث الفئة الفرعية Cat هنا من الفئة المجردة Animal، وترث بشكل طبيعي الطريقة المجردة Enjoy() المعلنة في فئة Animal، * لكن الفئة الفرعية Cat تشعر أنه يجب أن تكون كذلك يتم تنفيذه بنفسه طريقة الاستمتاع () هذه أيضًا غير مناسبة، لذا تعلن عن نفسها كفئة مجردة * إذن، من ينفذ طريقة الاستمتاع المجردة هذه، ومن يرث فئة فرعية، فمن ينفذ هذه الطريقة المجردة يستمتع (). * @author gacl * */abstract class Cat Extends Animal { /** * تضيف Cat سماتها الفريدة*/ public StringeyeColor; public Cat(String n, String c) { super(n);// اتصل بالفئة الأصلية طريقة بناء الحيوان this.eyeColor = c }}/** * ترث الفئة الفرعية BlueCat الفئة المجردة Cat، وتنفذ الطريقة المجردة التي تتمتع بها الموروثة من الفئة الأصلية Cat * @author gacl * */class BlueCat Extends Cat { public BlueCat(String n, String c) { super(n, c); .."); } }/** * ترث الفئة الفرعية Dog الفئة المجردة Animal وتنفذ الطريقة المجردة استمتع * @author gacl * */class Dog Extends Animal { /** * تضيف فئة Dog سماتها الفريدة * / سلسلة عامة furColor; public Dog(String n, String c) { super(n);// اتصل بمنشئ الفئة الأصلية Animal this.furColor = c; } @Override public void Enjoy() { System.out.println("Dog barks ...."); }} public class TestAbstract { /** * @param args */ public static void main(String[] args) { /** * بعد الإعلان عن فئة Cat كفئة مجردة، لا يمكن إنشاء مثيل لفئة Cat * نظرًا لأن الفئة المجردة غير مكتملة وتفتقد إلى الأذرع والأرجل، لا يمكن إنشاء مثيل للفئة المجردة. */ //Cat c = new Cat("Catname"، "blue")؛ Dog d = new Dog("dogname"، "black")؛ // اتصل بطريقة الاستمتاع بـ BlueCat التي نفذتها c = new BlueCat("BlueCatname"،"blue")؛ c.enjoy();// اتصل بطريقة الاستمتاع التي نفذتها}}