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

Javaأمثلة تشرح فكرة الـ Anonymous Inner Class في جافا

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

المثال الأول

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

ركز فقط على طريقة إنشاء الكائن و تخزينه في كائن من نفس النوع.

ملاحظة: الـ Anonymous Class الذي قمنا بتعريفه يبدأ من الكلمة new إلى آخر سطر.

Anonymous obj = new Anonymous() {
@Override
public void print() {
System.out.println("Anonymous Inner Class is called");
}
};
Anonymous obj = new Anonymous() { @Override public void print() { System.out.println("Anonymous Inner Class is called"); } };

كلما أردنا إستخدام الدالة print() نكتب التالي.

obj.print();
obj.print();


هنا قمنا بإنشاء Anonymous Class و قمنا باستدعاء الدالة التي فعلنا لها Override فيه مباشرةً عند تعريفه.
الأسلوب التالي يستخدم في حال كنت تريد إستدعاء الدالة التي فعلت لها Override مرة واحدة فقط.

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

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

ركز فقط على طريقة إنشاء الكائن و إستدعاء الدالة منه مباشرةً بعد أن يتم إنشاؤه.

ملاحظة: الـ Anonymous Class الذي قمنا بتعريفه يبدأ من الكلمة new إلى الرمز } الموجود في آخر سطر.

new Anonymous() {
@Override
public void print() {
System.out.println("Anonymous Inner Class is called");
}
}.print(); // Anonymous التي قنما بتعريفها بداخل الكلاس print() هنا قمنا باستدعاء الدالة
new Anonymous() { @Override public void print() { System.out.println("Anonymous Inner Class is called"); } }.print(); // Anonymous التي قنما بتعريفها بداخل الكلاس print() هنا قمنا باستدعاء الدالة

هنا لا يمكن إستخدام الدالة print() من جديد لأنه لا يمكن الوصول للكائن الذي يحتويها. و بالتالي لن نستطيع إستدعاءها من جديد.