¿Qué representa el modificador sellado en Kotlin?

Estoy un poco confundido sobre el uso del modificador sealed .

¿Qué hace?

Los documentos oficiales cubren esto.

Las classs selladas tienen jerarquías de inheritance restringidas: solo las classs que se declaran dentro de ellas o están en el mismo file que ellas (desde Kotlin 1.1) pueden ser subclasss de una class sellada.

Esto puede ser útil cuando se combina con expresiones when , que pueden garantizar que sus twigs comprueben exhaustivamente las posibles subclasss de una class sellada.

Este modificador se usa principalmente cuando desea restringir la posibilidad de crear una subclass, significa que todas las subclasss directas deben estar anidadas, esto es un ejemplo:

 sealed class Animal { class Cow(val name: String) : Animal() } //It generates a comstacktion error class Horse : Animal() { } 

Entonces, las classs sealed no pueden tener henetworkingeros fuera de la class.

Las otras respuestas son buenas, pero un punto importante creo que vale la pena agregar: las classs que extienden subclasss de una class sellada se pueden colocar en cualquier lugar, no necesariamente en el mismo file. Es importante tener en count que una class sellada no significa necesariamente que toda una jerarquía de inheritance estará en el mismo file a less que todas las subclasss también estén sealed .

Puede leer más sobre esto en los documentos oficiales para las classs selladas.