Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

Javaأمثلة حول فكرة Anonymous Class و Anonymous Object في جافا

في الدروس السابقة كنا نفعل extends للكلاس المعرف كـ abstract حتى نقوم باستخدامه.
أسلوب الـ Anonymous Class يتيح لك إستخدام أي كلاس معرف كـ abstract بدون أن تفعل له extends.


في المثال التالي قمنا بتعريف كلاس نوعه abstract إسمه A, يحتوي على دالة نوعها abstract, إسمها print().
في الكلاس Main قمنا بتعريف Anonymous Class من الكلاس A و فعلنا فيه Override للدالة print().
و قمنا بتخزين كائن الـ Anonymous Class في كائن إسمه obj.

المثال الأول

A.java
public abstract class A {               // A إسمه Abstract هنا قمنا بتعريف كلاس نوعه
 
    public abstract void print();       // print() إسمها abstract هنا قمنا بتعريف دالة نوعها
 
}

Main.java
public class Main {
 
    public static void main(String[] args) {
 
        // obj ثم قمنا بتخزنيه في الكائن A من Anonymous Inner Class هنا قمنا بخلق
        A obj = new A() {
            @Override                     // print() للدالة Override هنا فعلنا
            public void print() {
                System.out.println("obj is an Anonymous Inner Object");
            }
        };
 
        // obj من الكائن print() هنا قمنا باستدعاء الدالة
        obj.print();
 
    }
 
}

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

obj is an Anonymous Inner Object


في المثال التالي أعدنا نفس المثال السابق لكننا لم نقم بتخزين الكائن الذي سيرجعه كونستركتور الكلاس A في كائن من نفس النوع.
الفكرة هنا أنه يمكنك إنشاء الـ Anonymous Class و تنفيذ الدالة الموجودة فيه مباشرةً عندما يتم خلق الكائن دون الحاجة إلى تخزينه.
هذا الأسلوب مفيد في حال كنت تريد إنشاء كائن من كلاس معين و إستخدام دالة موجودة فيه مرة واحدة فقط.

المثال الثاني

A.java
public abstract class A {               // A إسمه Abstract هنا قمنا بتعريف كلاس نوعه
 
    public abstract void print();       // print() إسمها abstract هنا قمنا بتعريف دالة نوعها
 
}

Main.java
public class Main {
 
    public static void main(String[] args) {
 
        // print() أيضاً للدالة Override و لم نقم بتخزينه في كائن. و فعلنا A هنا قمنا بخلق كائن من الكلاس
        new A() {
            @Override
            public void print() {
                System.out.println("obj is an Anonymous Inner Object");
            }
        }.print(); // مباشرةً بعد أن تم إنشاء الكائن print() هنا قمنا باستدعاء الدالة
 
    }
 
}

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

obj is an Anonymous Inner Object