Classes Seladas
As classes seladas são as mais simples e fáceis de serem compreendidas, mas nem por isso menos importantes. Imagine que você tenha uma aplicação com várias classes gerando uma hieraraquia de heranças. Existe uma Superclasse, que é herdada por Subclasse1 e também temos a Subclasse 2, que herda de Subclasse 1, conforme a figura abaixo:
Essa hierarquia, conforme ilustrada na figura acima, poderia não ter fim, já que poderíamos criar uma Subclasse 3, que herdaria de Subclasse 2 e assim por diante. Bem, mas imagine que você queira impedir isso, fazendo com que determinada classe não possa ser herdada, ou seja, você tem a chamada “classe pronta”, que por não ser herdada também não aceitará a sobrescrita de métodos. Bem, para proteger sua classe contra novas operações de herança é que o tipo de classe selada é usada. Eu criei a mesma estrutura de classes da imagem acima:
Agora vou selar a Superclasse para impedir que a Subclasse1 herde dela, vejam como a sintaxe é simples:
Vou tentar compilar essa aplicação, já que a Subclasse1 herdava dela e a Subclasse2 herdava de Subclasse1:
Vejam que não foi possível e um erro de compilação surgiu.
Essa mesma lógica poderia valer para um método, ou seja, podemos permitir que uma classe seja herdada e impedir que um método seja sobrescrito, ou seja, podemos impedir que façam override em métodos. A única observação é que eles já precisam ser sobrescritos, ou seja, precisam estar presentes em alguma subclasse. Vou demonstrar com exemplos. A Subclasse1 também possui o método calculaPrecoParcelado, sobrescrito da Superclasse, vejam:
Ela está herdando de Superclasse e efetuando o override no método calculaPrecoParcelado.
Agora vamos selar o método calculaPrecoParcelado em Subclasse1, para impedir que Subclasse2 possa sobrescrevê-lo.
Agora vou tentar compilar a aplicação:
Agora o método calculaPrecoParcelado, presente em Subclasse1 está selado, ou seja, impedido de ser modificado por uma subclasse, que no caso é a Subclasse2.
Essa é a função das classes e métodos selados. Simples, mas muito importante!