fbpx

تعلم لغة الجافا – الدرس الحادي عشر كلاس التجريد Abstract Classes

0

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

فمثلا

abstract class abstractClass { 
    abstract void abstractMethod(); 
    void concreteMethod() { // لا يزال مسموحًا بالطرق الملموسة في فصول التجريد 
        System.out.println("This is a concrete method."); 
    } 
}

كلاس abstract مقابل الواجهة

يمكن أن تحتوي كلاس abstract على حقول غير final و static ويمكن أن تحتوي على طرق مطبقة أيضًا ولكن لا يمكن للواجهات. يجب تعريف كلاس abstract ذات الأساليب المجردة فقط كواجهات.

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

فمثلا:

abstract class X implements Y {
// يطبق كل طريقة Y باستثناء واحدة
}

class XX extends X {
// يطبق الطريقة المتبقية في Y
}

يمكن أن تحتوي الفصول المجردة على حقول static وطرق static وتعمل مع الفصول العادية.

تمرين

قم بإنشاء كلاس فرعية من كلاس abstract وقم بتطبيق طريقة abstract.

abstract class abstractClass { 
    abstract void abstractMethod(); 
    void concreteMethod() { // لا يزال مسموحًا بالطرق الملموسة في فصول التجريد

        System.out.println("This is a concrete method."); 
    } 
}

class B extends abstractClass { 
    void abstractMethod() { 
        System.out.println("B's implementation of abstractMethod."); 
    } 
}

class C extends abstractClass { 
// رمزك هنا
}

public class Main { 
    public static void main(String args[]) { 
        B b = new B(); 
        b.abstractMethod(); 
        b.concreteMethod();
        C c = new C(); 
        c.abstractMethod(); 
        c.concreteMethod();
    } 
}

الحل

abstract class abstractClass { 
    abstract void abstractMethod(); 
    void concreteMethod() { // لا يزال مسموحًا بالطرق الملموسة في فصول التجريد

        System.out.println("This is a concrete method."); 
    } 
}

class B extends abstractClass { 
    void abstractMethod() { 
        System.out.println("B's implementation of abstractMethod."); 
    } 
}

class C extends abstractClass { 
    void abstractMethod() { 
        System.out.println("C's implementation of abstractMethod."); 
    } 
}

public class Main { 
    public static void main(String args[]) { 
        B b = new B(); 
        b.abstractMethod(); 
        b.concreteMethod();
        C c = new C(); 
        c.abstractMethod(); 
        c.concreteMethod();
    } 
}

سنحصل على النتيجة التالية عند التشغيل

B's implementation of abstractMethod.
This is a concrete method.
C's implementation of abstractMethod.
This is a concrete method.

الدرس الثاني عشر

اترك رد

لن يتم نشر عنوان بريدك الإلكتروني.