Junior
Como funciona a herança em Kotlin?
sobes.tech IA
Resposta da IA
A herança em Kotlin baseia-se no princípio de classes abertas. Por padrão, todas as classes são fechadas (final), e para tornar uma classe herdável, ela deve ser explicitamente marcada com a palavra-chave open.
Pontos principais:
- Classes abertas: A classe base deve ser marcada como
open.open class Base { // ... } - Herança: A herança é feita usando dois pontos (
:), seguidos do nome da classe base e, se necessário, a chamada ao seu construtor.class Derived : Base() { // ... } - Sobrescrita de métodos e propriedades: Para sobrescrever métodos ou propriedades da classe base, estes devem estar marcados como
openna classe base, e na classe derivada usa-se a palavra-chaveoverride.Se o método ou propriedade da classe base não estiver marcado comoopen class Base { open fun process() { /* ... */ } open val value: Int = 0 } class Derived : Base() { override fun process() { /* ... */ } override val value: Int = 1 }open, não pode ser sobrescrito. - Acesso aos membros da classe base: O acesso aos membros da classe base na classe derivada é feito com a palavra-chave
super.class Derived : Base() { override fun process() { super.process() // Chamada ao método da classe base // ... } } - Construtores: Se a classe base tiver um construtor com parâmetros, a classe derivada deve chamar esse construtor na sua assinatura.
open class Base(name: String) { // ... } class Derived(name: String, age: Int) : Base(name) { // ... } - Interfaces: Uma classe pode implementar várias interfaces, e estas podem ser indicadas separando-as por vírgulas após a classe base (se houver). As interfaces por padrão são "abertas" para implementação.
interface MyInterface { fun doSomething() } class MyClass : Base(), MyInterface { override fun doSomething() { /* ... */ } } - Classes abstratas: Classes abstratas são usadas para definir implementação parcial e contêm métodos e propriedades abstratas (marcadas com
abstract) que devem ser implementadas em classes derivadas. Membros abstratos não requeremopen. Uma classe abstrata também não precisa ser marcada comoopenpara ser herdada.abstract class AbsBase { abstract fun abstractMethod() open fun concreteMethod() { /* ... */ } } class AbsDerived : AbsBase() { override fun abstractMethod() { /* ... */ } }
No geral, Kotlin busca a clareza, exigindo o uso de open para permitir herança e sobrescrita.