Os subtipos de uma classe selada devem ser mais explícitos sobre sua extensibilidade, um subtipo de uma classe selada deve ser sealed, final ou explicitamente marcada como non-sealed. Os records e enums são implicitamente final, portanto, não precisam ser marcados explicitamente como tal. É um erro marcar uma classe ou uma interface como non-sealed se não tiver um supertipo sealed direto.
É uma mudança compatível com o binário e a fonte para tornar uma classe final como sendo sealed. Não é binário nem compatível com a origem selar uma classe não final para a qual ainda não controlamos todas as implementações. É compatível com o binário, mas não com a origem, adicionar novos subtipos permitidos a uma classe selada (isso pode interromper a exaustividade das expressões switch).
As classes seladas têm vários usos, são úteis como uma técnica de modelagem de domínio quando faz sentido capturar um conjunto exaustivo de alternativas no modelo de domínio, também são úteis como uma técnica de implementação quando é desejável separar a acessibilidade da extensibilidade. Os tipos de classe seladas são um complemento natural dos records, pois juntos formam um padrão comum conhecido como tipos de dados algébricos, que também são um ajuste natural para o padrão matching, e que chegará em breve ao Java.
1Este exemplo usa uma forma de expressão switch, uma que usa padrões como rótulos de maiúsculas e minúsculas, que ainda não é suportada pela linguagem Java. A cadência de lançamento de seis meses nos permite co-projetar recursos, mas entregá-los de forma independente. Nós esperamos que esse switch seja capaz de usar os padrões como os rótulos case em um futuro próximo.