0Pricing
Kotlin Academy · Aula

sealed class vs sealed interface: quando usar cada uma

Entenda a diferença entre classes seladas e interfaces seladas no Kotlin.

sealed class vs sealed interface: quando usar cada uma é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.

Tipos selados no Kotlin

Classes e interfaces seladas restringem a hierarquia de classes a um conjunto conhecido de subtipos, permitindo expressões condicionais exaustivas.

Noções básicas de classes seladas

Uma classe selada restringe a criação de subclasses ao mesmo pacote (Kotlin 1.5 ou posterior) ou ao mesmo arquivo.
sealed class Shape
class Circle(val radius: Double) : Shape()
class Rectangle(val w: Double, val h: Double) : Shape()
object Unknown : Shape()

Interface selada: mais flexível

Uma interface selada permite que os subtipos estendam outras classes AND implementem outras interfaces simultaneamente — uma classe selada não permite isso.
sealed interface Result<out T>
data class Success<T>(val value: T) : Result<T>
data class Error(val ex: Exception) : Result<Nothing>

Diferenças principais

Classe selada: as subclasses podem ter construtores e estado. Interface selada: os subtipos podem estender qualquer classe. Use uma interface selada quando precisar de mais flexibilidade.
// sealed class subtype extends another class:
sealed interface Command
class MoveCommand(val dx: Int, val dy: Int) : Command, Serializable
class ResizeCommand(val scale: Double) : Command, Cloneable

Expressão condicional exaustiva: nenhum caso contrário necessário

Quando todos os subtipos selados são abrangidos, a expressão condicional é exaustiva — nenhum caso contrário é necessário, e o compilador impõe a completude.
fun area(shape: Shape): Double = when (shape) {
    is Circle -> Math.PI * shape.radius * shape.radius
    is Rectangle -> shape.w * shape.h
}  // no 'else' — compiler guarantees completeness

Adicionar um subtipo quebra expressões condicionais existentes

Adicione um novo subtipo selado, e as expressões condicionais existentes deixarão de compilar até serem atualizadas. Esse é o principal benefício.
// Add Triangle to Shape:
class Triangle(val base: Double, val height: Double) : Shape()
// Now the area() function above won't compile until
// a Triangle branch is added — safety net!

Classes seladas com propriedades comuns

Declare as propriedades compartilhadas na classe selada.
sealed class NetworkResult {
    abstract val timestamp: Long
}
data class SuccessResult(val data: String, override val timestamp: Long) : NetworkResult()
data class FailureResult(val error: String, override val timestamp: Long) : NetworkResult()

Tipos selados aninhados

Os subtipos selados também podem ser selados, criando hierarquias de vários níveis.
sealed interface UiState
object Loading : UiState
sealed interface Loaded : UiState
data class Content(val items: List<String>) : Loaded
data class Empty(val hint: String) : Loaded
data class Failure(val error: String) : UiState

Subtipos objeto para variantes sem estado

Use objeto para subtipos selados que não carregam estado.
sealed class Direction
object North : Direction()
object South : Direction()
object East : Direction()
object West : Direction()

fun move(d: Direction) = when (d) {
    North -> y++
    South -> y--
    East -> x++
    West -> x--
}

Classe selada + classe de dados + objeto em conjunto

Combine classe de dados (para subtipos com estado) e objeto (para instâncias únicas) sob um tipo selado.
sealed class LoadState
object Idle : LoadState()
object Loading : LoadState()
data class Success(val count: Int) : LoadState()
data class Error(val msg: String) : LoadState()

Quando escolher classe selada em vez de interface

Use uma classe selada quando todos os subtipos compartilharem um estado comum. Use uma interface selada quando os subtipos precisarem estender classes-base diferentes ou implementar outras interfaces.

Verificação rápida

Que vantagem a interface selada oferece em relação à classe selada?

Recapitulação

Uma classe ou interface selada restringe a hierarquia a tipos conhecidos. Uma expressão condicional sobre um tipo selado é exaustiva — nenhum caso contrário é necessário. Uma interface selada permite que os subtipos estendam outras classes. Use classe de dados para subtipos com estado e objeto para subtipos sem estado.

Perguntas Frequentes

A aula “sealed class vs sealed interface: quando usar cada uma” é grátis?

Sim — o texto completo de “sealed class vs sealed interface: quando usar cada uma” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.

O que vou aprender em “sealed class vs sealed interface: quando usar cada uma”?

Entenda a diferença entre classes seladas e interfaces seladas no Kotlin. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Kotlin Academy?

Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “sealed class vs sealed interface: quando usar cada uma”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Kotlin Academy?

Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. sealed class vs sealed interface: quando usar cada uma
  2. when exaustivo com hierarquias seladas
  3. Modelando o estado da interface com classes seladas
  4. Aninhando e combinando hierarquias seladas
← Voltar para Kotlin Academy