🎭 الفئة المجهولة في جافا: التعريف والاستخدام العملي

الفئة المجهولة (Anonymous Class) في جافا هي فئة لا تمتلك اسمًا محددًا ويتم تعريفها وإنشاء كائن منها في نفس اللحظة. تُستخدم عادةً عندما تحتاج إلى إنشاء كائن لاستخدامه مرة واحدة فقط دون الحاجة لتعريف فئة كاملة.


💡 لماذا نستخدم الفئات المجهولة؟

تستخدم الفئات المجهولة في الحالات التالية:

  • عندما تحتاج إلى تنفيذ واجهة (Interface) أو توسيع فئة (Class) مرة واحدة فقط
  • لتبسيط الكود وتجنب إنشاء ملفات فئة منفصلة للمهام البسيطة
  • في برمجة واجهات المستخدم (GUI) ومعالجة الأحداث

📝 بناء الفئة المجهولة الأساسي

InterfaceName/ObjectName object = new InterfaceName/ClassName() {
    // تنفيذ الطرق أو إضافة خصائص جديدة هنا
};

🔧 مثال عملي: تنفيذ واجهة

لنفترض أن لدينا واجهة بسيطة اسمها Greeting:

interface Greeting {
    void sayHello();
}

يمكننا إنشاء فئة مجهولة تنفذ هذه الواجهة:

public class Main {
    public static void main(String[] args) {
        Greeting englishGreeting = new Greeting() {
            @Override
            public void sayHello() {
                System.out.println("Hello World!");
            }
        };
        
        englishGreeting.sayHello(); // Hello World!
    }
}

🎯 مثال آخر: توسيع فئة مجردة

abstract class Animal {
    abstract void makeSound();
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Animal() {
            @Override
            void makeSound() {
                System.out.println("Woof! Woof!");
            }
        };
        
        dog.makeSound(); // 출력: Woof! Woof!
    }
}

⚠️ ملاحظات هامة عن الفئات المجهولة

  • لا يمكن أن يكون للفئة المجهولة constructor (منشئ)
  • يمكنها الوصول إلى المتغيرات النهائية (final) والمؤقتة (effectively final) من النطاق المحيط
  • لا يمكن أن تحتوي على طرق static إلا إذا كانت ثابتة (constants)
  • مثالية للاستخدام لمرة واحدة فقط

🌟 متى نختار الفئة المجهولة؟

استخدم الفئة المجهولة عندما:

  • يكون الكود قصيرًا وواضحًا
  • لا تحتاج لإعادة استخدام الفئة في أماكن أخرى
  • تريد تبسيط هيكل البرنامج

استخدم الفئة العادية عندما:

  • تحتاج لإعادة استخدام الكود مرة واحدة
  • الكود معقد ويحتاج لتنظيم أفضل
  • تحتاج إلى وراثة منها لاحقًا