تخطَّ إلى المحتوى

sealed / permits

الأصناف والواجهات المختومة (Sealed) sealed / permits

sealed تحدد بدقة أي الأصناف أو الواجهات يحق لها وراثة صنف أو واجهة معينة، عبر قائمة permits صريحة.

الصنف أو الواجهة العادية يمكن لأي صنف public آخر أن يرثها. sealed تقفل هذا الباب: تحدد صراحة (عبر permits) قائمة الأصناف الفرعية المسموح بها فقط — أي محاولة وراثة من خارج القائمة تفشل عند الترجمة.

كل صنف في قائمة permits يجب أن يحدد مصيره بأحد ثلاثة: final (لا وراثة أخرى)، sealed (تقييد إضافي بقائمة جديدة)، أو non-sealed (فتح الباب من جديد لأي وراثة). الفائدة الأكبر تظهر مع switch: بما أن المترجم يعرف كل الأصناف الممكنة، يستطيع التأكد من تغطية كل الحالات بدون default.

الصياغة

public sealed interface الاسم permits الصنف1, الصنف2 { }

public final class الصنف1 implements الاسم { }
public non-sealed class الصنف2 implements الاسم { }

📄 مثال

public sealed interface Shape permits Circle, Square {}

public final class Circle implements Shape {
    public double radius;
    public Circle(double radius) { this.radius = radius; }
}

public final class Square implements Shape {
    public double side;
    public Square(double side) { this.side = side; }
}

static double area(Shape shape) {
    return switch (shape) {
        case Circle c -> Math.PI * c.radius * c.radius;
        case Square s -> s.side * s.side;
        // لا حاجة لـ default — المترجم يعرف أنه لا يوجد نوع ثالث
    };
}

أهم النقاط

العنصرالوظيفة
sealedيُقفل الصنف/الواجهة على قائمة وراثة محددة
permitsتحدد صراحة الأصناف الفرعية المسموح بها
final (ضمن التسلسل)الصنف الفرعي لا يمكن أن يُورَّث بعد الآن
non-sealed (ضمن التسلسل)الصنف الفرعي يفتح الباب لوراثة غير مقيّدة

💡 نصائح عملية

  • استخدمها عند نمذجة تسلسل هرمي مغلق تعرف كل أشكاله مسبقًا (نتيجة نجاح/فشل، شكل هندسي، حالة طلب)
  • دمجها مع switch يمنحك تحققًا من التغطية الكاملة وقت الترجمة بدل خطأ وقت التشغيل

⚠️ أخطاء شائعة

  • نسيان تحديد final أو sealed أو non-sealed على صنف فرعي مباشر — خطأ ترجمة إجباري
  • توقع أن permits تمنع الوراثة عبر الانعكاس (reflection) — sealed تقيّد الترجمة فقط، لا حماية أمنية مطلقة

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار JAVA الكامل بالعربي.