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 public
e private
em breve. Você aprenderá sobre mais dois modificadores de visibilidade protected
e internal
(bem como public
e 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, é public
por 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 protected
membro 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 constructor
palavra-chave.
O construtor é public
por 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.