A palavra-chave permits foi introduzida no Java 15 como parte da implementação de classes seladas (sealed classes). Ela é usada em conjunto com a palavra-chave sealed para controlar quais classes ou interfaces podem estender ou implementar uma classe selada.
O que são sealed classes?
As sealed classes permitem que você restrinja quais outras classes podem herdar ou implementar uma classe ou interface. Isso é útil para manter um controle mais rigoroso sobre a hierarquia de classes, permitindo apenas um conjunto bem definido de subclasses.
Sintaxe básica:
public sealed class ClassePai permits Subclasse1, Subclasse2 {
// Corpo da classe
}
Explicação:
- A palavra-chave sealed indica que a classe ClassePai é selada.
- A palavra-chave permits lista explicitamente as classes que podem estender a ClassePai. Neste caso, apenas Subclasse1 e Subclasse2 podem herdar de ClassePai.
Posts recentes
Exemplo completo:
// Classe selada
public sealed class Forma permits Circulo, Retangulo {
// membros da classe
}
// Subclasse permitida
public final class Circulo extends Forma {
// membros da classe Circulo
}
// Subclasse permitida
public final class Retangulo extends Forma {
// membros da classe Retangulo
}
Nesse exemplo:
- A classe Forma é selada e apenas Circulo e Retangulo podem estender Forma.
- As subclasses Circulo e Retangulo são final, o que significa que não podem ser estendidas ainda mais.
Regras importantes:
- Subclasses de uma classe selada devem ser uma das seguintes:
- final: A classe é final e não pode ser estendida.
- sealed: A subclasse pode ser selada novamente, controlando quais classes podem estendê-la.
- non-sealed: A subclasse é aberta, permitindo que outras classes a estendam livremente.
Exemplo com diferentes tipos de subclasses:
public sealed class Animal permits Cachorro, Gato, Pássaro {
// membros da classe
}
public final class Cachorro extends Animal {
// classe final, não pode ser estendida
}
public sealed class Gato extends Animal permits Siames, Persa {
// classe selada, apenas Siames e Persa podem herdar
}
public non-sealed class Pássaro extends Animal {
// classe não selada, qualquer classe pode estender
}
Nesse exemplo:
- Cachorro é final e não pode ser estendida.
- Gato é selada novamente, limitando suas subclasses a Siames e Persa.
- Pássaro é não selada, permitindo que qualquer classe futura herde de Pássaro.
Quando usar:
- sealed e
permits
são úteis quando você deseja manter um controle sobre quais classes podem herdar de uma classe, garantindo que a hierarquia permaneça previsível e bem definida.
Essas restrições de herança fornecem maior controle e segurança sobre a hierarquia de classes, o que pode ajudar a reduzir erros e comportamentos inesperados no código.