Junior
O que são modificadores de visibilidade e como usá-los em Kotlin?
sobes.tech IA
Resposta da IA
Os modificadores de visibilidade em Kotlin determinam a acessibilidade das declarações (classes, interfaces, funções, propriedades) para outras partes do programa.
Os principais modificadores de visibilidade:
public: Visível em toda parte. É o modificador padrão.internal: Visível apenas dentro de um módulo. Um módulo é considerado um conjunto de ficheiros Kotlin compilados juntos.protected: Visível dentro da classe e das suas subclasses (incluindo membros definidos em classes herdadas). Não visível fora do pacote.private: Visível apenas dentro do ficheiro onde é declarado. Para membros de classe, apenas dentro dessa classe (e do seu objeto companion, classes aninhadas e internas).
Aplicação dos modificadores:
- A classes, interfaces, objetos e seus construtores.
- A funções, propriedades e seus getters/setters ao nível superior (fora de classes).
- A membros de classe (classes aninhadas, internas, funções, propriedades).
Exemplo:
// Ficheiro: example.kt
private const val PRIVATE_CONSTANT = 1 // Visível apenas neste ficheiro
internal fun internalFunction() { // Visível apenas dentro do módulo
println("Função interna chamada")
}
open class BaseClass {
protected val protectedProperty = "Protegido" // Visível nesta classe e nas suas subclasses
fun publicMethod() { // Visível em toda parte (public por padrão)
println("Método público chamado")
}
private fun privateMethod() { // Visível apenas dentro de BaseClass
println("Método privado chamado")
}
}
class DerivedClass : BaseClass() {
fun accessProtected() {
println("Acedendo à propriedade protegida: $protectedProperty") // Acesso a protected
// privateMethod() // Erro: private não visível na subclasse
}
}
fun main() {
val base = BaseClass()
base.publicMethod()
// base.protectedProperty // Erro: protected não visível fora da classe e subclasses
val derived = DerivedClass()
derived.accessProtected()
internalFunction()
// PRIVATE_CONSTANT // Erro: private a nível superior visível apenas no ficheiro de declaração
}
| Modificador | Acessibilidade | Onde usar |
|---|---|---|
public |
Em toda parte | Por padrão, quando não especificado outro modificador |
internal |
Dentro do módulo | Para API dentro de uma biblioteca ou módulo |
protected |
Dentro da classe e suas subclasses (para membros) | Para criar hierarquias de classes com herança |
private |
Dentro do ficheiro (nível superior); dentro da classe (para membros) | Para ocultar detalhes de implementação dentro do ficheiro ou classe |