Java 21 OCP Chapter 7 : Sealed Classes
Java’da sealed class’lar, bir sınıfın hangi alt sınıflar tarafından extend edilebileceğini açıkça belirlememizi sağlar. Böylece kalıtım…
Java 21 OCP Chapter 7 : Sealed Classes
Java’da sealed class’lar, bir sınıfın hangi alt sınıflar tarafından extend edilebileceğini açıkça belirlememizi sağlar. Böylece kalıtım hiyerarşisini rastgele genişleyen, kontrolsüz bir yapı olmaktan çıkarıp, derleyici tarafından doğrulanan kapalı ve tahmin edilebilir bir modele dönüştürür.
Sealed Class Deklare Etmek
Sealed Class Anahtar kelimeleri
- sealed:
sealedanahtar kelimesi, bir sınıfın yalnızca belirlenen sınıflar tarafından extend edilebilmesini sağlar. Böylece kalıtım zinciri tamamen kontrol altına alınır ve sınıfın dışarıdan rastgele genişletilmesi engellenir. - permits:
permits,sealedanahtar kelimesiyle birlikte kullanılır ve hangi sınıfların bu sealed sınıfı extend edebileceğini açıkça belirtir. Bu liste compile-time’da doğrulanır; listede olmayan hiçbir sınıf sealed sınıfı extend edemez. - non-sealed:
non-sealed, bir sealed sınıfı extend eden alt sınıfa uygulanır ve bu alt sınıfın tekrar herkes tarafından extend edilebileceğini ifade eder. Yani sealed sınıf tarafından izin alınır, fakat alt sınıf kendi hiyerarşisini yeniden açabilir.
public sealed class Animal permits Dog, Cat {}
public final class Dog extends Animal {}
public non-sealed class Cat extends Animal {}
Sealed Classları Compile Etmek
Bir sealed class’ın tüm izin verdiği alt sınıflar (subclasslar) aynı pakette veya aynı module içinde bulunmak zorundadır. Ayrıca permits listesinde belirtilen tüm subclass’lar gerçekten sealed class’ı extend etmek zorundadır. Aksi hâlde derleyici compile-time error üretir.
sealed bir sınıfı doğrudan extend eden her sınıf, mutlaka aşağıdaki üç anahtar kelimeden birine sahip olmalıdır:
**final** → Bu sınıf artık daha fazla extend edilemez.**sealed** → Bu sınıf da kendi alt sınıflarını kısıtlayabilir.**non-sealed** → Bu sınıfın extend edilmesi tekrar serbest bırakılır.
Bu üç anahtar kelimeden biri yazılmak zorundadır, aksi hâlde Java derleyicisi compile-time hatası verir.
public sealed class Animal permits Dog, Cat, Bird {}
public final class Dog extends Animal {} // alt sınıflara izin yok
public sealed class Cat extends Animal permits PersianCat {} // sadece izin verilenler
public non-sealed class Bird extends Animal {} // herkes extend edebilir
Permits Kelimesini Boş Bırakmak
Bir sealed class ile onun alt sınıfları farklı dosyalarda tanımlanıyorsa, Java’nın bu ilişkiyi doğrulaması için permits anahtar kelimesinin mutlaka belirtilmesi gerekir. Aksi hâlde derleyici sealed sınıfın hangi sınıflar tarafından extend edilebileceğini bilemez ve compile-time error üretir.
Ancak şu iki durumda **permits yazmak zorunlu değildir**:
- Sealed sınıf ile tüm alt sınıflar aynı dosya içerisinde tanımlanıyorsa
(top-level sınıflar olsalar bile tek
.javadosyasındalar) - Alt sınıflar sealed sınıfın içindeki “nested class” olarak tanımlanıyorsa
Bu iki durumda Java, sealed sınıfın alt sınıflarını doğrudan görebildiği için permits anahtar kelimesinin açıkça yazılmasına gerek duymaz.
Sealing Interfaces
Sadece sınıflar değil, interface’ler de sealed olabilir. Sealed interface kullanımı aynı mantığı taşır: Interface’i kimlerin implement edebileceğini veya extend edebileceğini açıkça sınırlandırırsın.
Ancak sealed interface’lerde ek bir önemli kural vardır:
Bir sealed interface’i implement eden veya extend eden her sınıf ya da interface, mutlaka
final,sealedveyanon-sealedanahtar kelimelerinden birini kullanmak zorundadır.
Yani sealed interface’lerde de hiyerarşi kontrolü zorunlu şekilde sürdürülür.
public sealed interface Vehicle permits Car, Electric {}
// final → daha genişletilemez
public final class Car implements Vehicle {}
// sealed → kendi alt interface/sınıflarını yine kısıtlayabilir
public sealed interface Electric extends Vehicle permits Tesla {}
// non-sealed → tekrar herkes implement edebilir
public non-sealed class Tesla implements Electric {}
Sonraki konumuzda “Chapter 7 | Records” konusunu ele alacağız.
Bana ulaşmak isterseniz;
***LinkedIn Github Instagram***

메타데이터
- post_id
- 5ce2eab007d3
- slug
- java-21-ocp-chapter-7-sealed-classes-5ce2eab007d3
- url
- https://medium.com/@ardaonur_yazilim/java-21-ocp-chapter-7-sealed-classes-5ce2eab007d3
- canonical_url
- https://medium.com/@ardaonur_yazilim/java-21-ocp-chapter-7-sealed-classes-5ce2eab007d3
- author_url
- https://medium.com/@ardaonur_yazilim
- status
- ok
- fetched_at
- 2026-07-09 13:13:48