Explique como funciona a palavra-chave 'super' na linguagem Kotlin.
sobes.tech IA
Resposta da IA
A palavra-chave super é usada para aceder aos membros (propriedades, métodos) da classe pai a partir da classe filha.
As principais formas de uso:
-
Chamada ao construtor da classe pai: Frequentemente usado no construtor da classe filha para chamar o construtor correspondente do pai. Isto é obrigatório se a classe pai tiver um construtor primário com parâmetros.
open class Parent(val name: String) class Child(name: String) : Parent(name) { // O construtor de Child chama o construtor de Parent, // passando o parâmetro name. } -
Acesso aos membros da classe pai, sobrescritos na filha: Permite aceder à implementação de um método ou propriedade na classe pai, mesmo que tenham sido sobrescritos (com
override) na filha.open class Base { open fun greet() { println("Hello from Base") } open val value: Int = 1 } class Derived : Base() { override fun greet() { super.greet() // Chamada a greet() de Base println("Hello from Derived") } override val value: Int = 2 get() { println("Acedendo ao valor de Derived") return super.value + 1 // Acesso a value de Base } } -
Acesso aos membros de um tipo superior específico (em caso de herança múltipla de interfaces): Se uma classe implementa várias interfaces que têm membros com nomes iguais,
superjunto com a especificação do nome da interface entre colchetes angulares (super<TypeName>) permite indicar de forma inequívoca a qual membro de qual interface se refere.interface MyInterface1 { fun foo() { println("MyInterface1 foo") } } interface MyInterface2 { fun foo() { println("MyInterface2 foo") } } class MyClass : MyInterface1, MyInterface2 { override fun foo() { super<MyInterface1>.foo() // Chamada a foo() de MyInterface1 super<MyInterface2>.foo() // Chamada a foo() de MyInterface2 } }