Sealed class (Java 17+) hạn chế những class nào được phép extend nó, khai báo qua permits.
Mỗi subclass phải là final, sealed hoặc non-sealed.
java
public sealed class Shape permits Circle, Rectangle, Triangle {}Lợi ích lớn nhất là khi ghép với Pattern Matching: compiler biết đủ mọi subtype nên kiểm tra được exhaustiveness — switch expression không cần default nếu đã xử lý hết.
java
switch (shape) {
case Circle c -> /* ... */;
case Rectangle r -> /* ... */;
case Triangle t -> /* ... */;
}Bỏ sót một case là compiler báo lỗi ngay.
- So với abstract class, sealed class đóng gói hierarchy chặt hơn và phòng được subtype ngoài ý muốn.
- Hay dùng cho domain model, error type và state machine.