Palavra-chave sealed

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.

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.