في الدروس السابقة كنا نفعل extends
للكلاس المعرف كـ abstract
حتى نقوم باستخدامه.
أسلوب الـ Anonymous Class يتيح لك إستخدام أي كلاس معرف كـ abstract
بدون أن تفعل له extends
.
في المثال التالي قمنا بتعريف كلاس نوعه abstract
إسمه A
, يحتوي على دالة نوعها abstract
, إسمها print()
.
في الكلاس Main
قمنا بتعريف Anonymous Class من الكلاس A
و فعلنا فيه Override للدالة print()
.
و قمنا بتخزين كائن الـ Anonymous Class في كائن إسمه obj
.
المثال الأول
public abstract class A { // A إسمه Abstract هنا قمنا بتعريف كلاس نوعه public abstract void print(); // print() إسمها abstract هنا قمنا بتعريف دالة نوعها }
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 و تنفيذ الدالة الموجودة فيه مباشرةً عندما يتم خلق الكائن دون الحاجة إلى تخزينه.
هذا الأسلوب مفيد في حال كنت تريد إنشاء كائن من كلاس معين و إستخدام دالة موجودة فيه مرة واحدة فقط.
المثال الثاني
public abstract class A { // A إسمه Abstract هنا قمنا بتعريف كلاس نوعه public abstract void print(); // print() إسمها abstract هنا قمنا بتعريف دالة نوعها }
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