CodeBlanks Logo Icon CodeBlanks

Sealed sınıf

sealed sınıf ile kısıtlı mirası öğrenirsin.

Sealed sınıf nedir?

Bir sealed sınıf, hangi sınıfların kendisinden miras alabileceğini açıkça listeler. sealed anahtar kelimesiyle tanımlanır; permits ile izin verilen alt sınıflar belirtilir. Java 17'de standartlaştı.

Örnek: sealed class Shape permits Circle, Square { }. Burada Shape yalnızca Circle ve Square sınıflarının miras almasına izin verir. Başka bir sınıf extends Shape yazamaz; derleme hatası alır. Bu, hiyerarşiyi öngörülebilir tutar. Alt sınıflar final, sealed veya non-sealed olmalıdır. Sealed, kalıtım ağacını kapatmanın resmi yoludur. Pattern matching ile birlikte güçlüdür.

Sealed avantajı

Sealed sınıflar, kalıtım hiyerarşisini sınırlayarak kodun öngörülebilir olmasını sağlar. Derleyici, tüm alt sınıfları bildiği için pattern matching gibi özelliklerde tükenmezlik denetimi yapabilir.

Örnek: sealed class Shape permits Circle, Square tanımladıysan, bir switch ifadesinde Circle ve Square durumlarını kapsarsan derleyici tüm olasılıkların işlendiğini doğrular. Bu, eksik durumların erken yakalanmasını sağlar. Sealed olmadan, kimin Shape'i extend ettiği bilinemez; denetim mümkün olmaz. Sealed, kütüphane tasarımcılarının hiyerarşiyi korumasına da yardımcı olur. Sürüm boyunca alt sınıf listesi sabit kalır.

Uygulama Sealed Shape sınıfını tanımla

sealed class Shape permits Circle, Square { } tanımla. Sonra final class Circle extends Shape { } ve final class Square extends Shape { } yaz. main içinde bir Shape dizisi tanımla: Shape[] shapes = { new Circle(), new Square() };. for döngüsü ile her birinin sınıf adını System.out.println(s.getClass().getSimpleName()); ile yazdır.

Başlangıç kodu

Main.java
// Sealed Shape sınıfını tanımla
// Circle ve Square alt sınıflarını final olarak yaz
// main'de shapes dizisi oluştur ve döngüyle yazdır

Örnek çözüm

Main.java
sealed class Shape permits Circle, Square {
}
final class Circle extends Shape {
}
final class Square extends Shape {
}
class Main {
    public static void main(String[] args) {
        Shape[] shapes = { new Circle(), new Square() };
        for (Shape s : shapes) {
            System.out.println(s.getClass().getSimpleName());
        }
    }
}

Beklenen çıktı

Circle
Square

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Sealed sınıf hangi kelimeyle alt sınıfları listeler?

  • extends
  • implements
  • permits Doğru cevap
  • with

Açıklama: permits kelimesi alt sınıfları listeler.

2 Sealed sınıf kavramlarını eşle

Kavram Anlamı
sealed Kısıtlı miras kelimesi
permits İzin listesi kelimesi
final Kapatılmış alt sınıf
non-sealed Açık alt sınıf

3 permits satırını tamamla

Soru
sealed class Shape ____ Circle, Square { }
final class Circle extends Shape { }
final class Square extends Shape { }
Cevap
sealed class Shape permits Circle, Square { }
final class Circle extends Shape { }
final class Square extends Shape { }

Açıklama: permits kelimesi izin verilen alt sınıfları listeler.

Orta seviye bölümündeki tüm dersler