Neste artigo, você aprenderá sobre todos os 4 modificadores de visibilidade em Kotlin e como eles funcionam em diferentes cenários.
Modificadores de visibilidade são palavras-chave que definem a visibilidade (acessibilidade) de classes, objetos, interface, construtores, funções, propriedades e seus configuradores. (Você não pode definir o modificador de visibilidade de getters, pois eles sempre têm a mesma visibilidade da propriedade.)
Em artigo Kotlin classe e objetos, você aprendeu sobre modificadores de visibilidade publice privateem breve. Você aprenderá sobre mais dois modificadores de visibilidade protectede internal(bem como publice private) em detalhes.
Modificadores de visibilidade dentro do pacote
Um pacote organiza um conjunto de funções, propriedades e classes, objetos e interfaces relacionadas. Leitura recomendada: Pacotes Kotlin
| Modificador | Descrição |
|---|---|
| público | declarações são visíveis em todos os lugares |
| privado | visível dentro do arquivo que contém a declaração |
| interno | visível dentro do mesmo módulo (um conjunto de arquivos Kotlin compilados juntos) |
| protegido | não disponível para pacotes (usado para subclasses) |
Nota: Se o modificador de visibilidade não for especificado, é publicpor padrão.
Vamos dar um exemplo:
// nome do arquivo: hello.kt package test fun function1 () () // público por padrão e visível em qualquer lugar private fun function2 () () // visível dentro de hello.kt internal fun function3 () () // visível dentro do mesmo módulo nome da var = "Foo" // visível em qualquer lugar get () = campo // visível dentro de hello.kt (igual à sua propriedade) conjunto privado (valor) (// visível dentro de campo hello.kt = valor) classe privada classe1 () // visível dentro de hello.kt
Modificadores de visibilidade dentro de classes e interfaces
Veja como os modificadores de visibilidade funcionam para membros (funções, propriedades) declarados dentro de uma classe:
| Modificador | Descrição |
|---|---|
| público | visível para qualquer cliente que possa ver a classe declarante |
| privado | visível apenas dentro da classe |
| protegido | visível dentro da classe e suas subclasses |
| interno | visível para qualquer cliente dentro do módulo que pode ver a classe declarante |
Nota: Se você substituir um protectedmembro na classe derivada sem especificar sua visibilidade, sua visibilidade também será protected.
Vamos dar um exemplo:
open class Base () (var a = 1 // público por padrão privado var b = 2 // privado para classe Base protegido open val c = 3 // visível para Base e classe Derivada interno val d = 4 // visível dentro do mesmo módulo protegido fun e () () // visível para a classe Base e Derived) classe Derived: Base () (// a, c, d e e () da classe Base são visíveis // b não é visível override val c = 9 // c é protegido) fun main (args: Array) (val base = Base () // base.a e base.d são visíveis // base.b, base.c e base .e () não são visíveis val derivados = Derivado () // derivado.c não é visível)
Alterando a Visibilidade de um Construtor
Por padrão, a visibilidade de um construtor é public. No entanto, você pode alterá-lo. Para isso, você precisa adicionar explicitamente a constructorpalavra-chave.
O construtor é publicpor padrão no exemplo abaixo:
classe Teste (val a: Int) (// código)
Veja como você pode alterar sua visibilidade.
classe Teste construtor privado (val a: Int) (// código)
Aqui está o construtor private.
Observação: no Kotlin, funções, variáveis e classes locais não podem ter modificadores de visibilidade.








