A palavra-chave sealed foi introduzida no Java 15 como uma funcionalidade experimental e se tornou uma característica oficial no Java 17. Ela é usada para definir classes e interfaces que têm um conjunto restrito de subclasses permitidas. Isso ajuda a controlar e restringir a herança, garantindo que apenas as subclasses especificadas possam estender ou implementar uma classe ou interface selada.
O que faz a palavra-chave sealed?
- sealed permite que você defina quais classes podem estender uma classe ou interface. Isso fornece um controle mais rigoroso sobre a hierarquia de classes e interfaces.
- Melhora a segurança e a integridade do código, pois restringe as subclasses possíveis a um conjunto conhecido e controlado.
Sintaxe Básica:
1.Classe Selada:
public sealed class Forma permits Circulo, Quadrado {
// Corpo da classe
}
Nesse exemplo:
- Forma é uma classe selada.
- As únicas classes que podem estender Forma são Circulo e Quadrado.
2.Subclasses:
public final class Circulo extends Forma {
// Corpo da classe
}
public final class Quadrado extends Forma {
// Corpo da classe
}
Nesse exemplo:
- Circulo e Quadrado são as únicas classes permitidas para estender Forma.
- A palavra-chave final é usada para indicar que essas classes não podem ser estendidas.
Posts recentes
Exemplo Completo:
1.Definição da Classe Selada:
public sealed class Veiculo permits Carro, Moto {
// Corpo da classe
}
2.Subclasses da Classe Selada:
public final class Carro extends Veiculo {
// Corpo da classe
}
public final class Moto extends Veiculo {
// Corpo da classe
}
Benefícios do Uso de sealed:
1.Controle Rigoroso:
- Permite controlar rigorosamente quais classes podem estender uma classe selada ou implementar uma interface selada. Isso é útil para definir uma hierarquia de classes que deve ser fixa e conhecida.
2.Segurança e Robustez:
- Ajuda a proteger a integridade da hierarquia de classes, garantindo que apenas as classes permitidas possam estender ou implementar uma classe ou interface.
3.Melhor Suporte a Pattern Matching:
- Facilita o uso de pattern matching com instanceof e switch, pois o compilador pode garantir que todos os casos possíveis são tratados.
4.Documentação e Manutenção:
- Melhora a documentação do código ao deixar claro quais são as classes e interfaces permitidas, o que ajuda na manutenção e compreensão do código.
Considerações Adicionais:
- sealed pode ser usado em conjunto com outras palavras-chave como non-sealed e final.
- non-sealed é usado para indicar que uma classe que estende uma classe selada não é restrita e pode ser estendida por outras classes.
- final é usado para indicar que uma classe selada não pode ser estendida.
Exemplo com non-sealed:
public sealed class Animal permits Cachorro, Gato {
// Corpo da classe
}
public non-sealed class Cachorro extends Animal {
// Corpo da classe
}
public final class Gato extends Animal {
// Corpo da classe
}
Nesse exemplo:
- Cachorro é uma classe non-sealed, o que significa que outras classes podem estendê-la.
- Gato é uma classe final, o que significa que não pode ser estendida.
O uso de sealed ajuda a criar um design de classe mais seguro e previsível, promovendo uma arquitetura de software mais controlada e organizada.