Las clases selladas en Java, introducidas en Java 15 como una característica en vista previa y estandarizadas en Java 17, permiten restringir qué clases pueden heredar de una clase base, mejorando la seguridad y el diseño del código.
Las clases selladas (sealed) establecen un conjunto específico de clases que pueden extender o implementar una clase base, evitando la herencia no controlada.
public sealed class Figura permits Circulo, Rectangulo {}
public final class Circulo extends Figura {}
public final class Rectangulo extends Figura {}
Aquí, Figura es una clase sellada, lo que significa que solo Circulo y Rectangulo pueden heredar de ella.
Las clases que extienden una clase sellada deben usar una de las siguientes opciones:
- final: No permite más subclases.
- sealed: Permite definir otro conjunto restringido de subclases.
- non-sealed: Permite herencia sin restricciones.
Ejemplo con diferentes modificaciones:
public sealed class Figura permits Circulo, Poligono {}
public final class Circulo extends Figura {}
public sealed class Poligono extends Figura permits Triangulo {}
public non-sealed class Triangulo extends Poligono {}
Las clases selladas en Java proporcionan un control más preciso sobre la herencia, facilitando la definición de modelos de dominio más seguros y expresivos. Son especialmente útiles cuando se combinan con switch y pattern matching para estructurar mejor el código.