English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste artigo, você vai entender o4espécie de modificadores de visibilidade, bem como como eles funcionam em diferentes situações.
Os modificadores de visibilidade são palavras-chave usadas para definir a visibilidade (acesso) de classes, objetos, interfaces, construtores, funções, propriedades e seus setters. (Não é possível definir modificadores de visibilidade para getters, pois eles sempre têm a mesma visibilidade que as propriedades).
NoClasse e Objetos no KotlinNo texto, você teve uma visão geral do modificador de visibilidade public e private. Neste artigo, você vai aprender detalhadamente sobre os outros dois modificadores de visibilidade protected e internal (e public e private).
O pacote organiza um grupo de funções, propriedades e classes, objetos e interfaces relacionados.
modificador | descrição |
---|---|
public | visível em todos os lugares |
private | visível dentro do arquivo que contém a declaração |
internal | visível dentro do mesmo módulo (um grupo de arquivos Kotlin compilados juntos) |
protected | não pode ser usado em pacotes (usado para subclasses) |
Atenção:Se não for especificado o modificador de visibilidade, o valor padrão é public.
Vamos dar um exemplo:
//Nome do arquivo: hello.kt package test fun função1() {} //por padrão é público e visível em qualquer lugar private fun função2() {} //visível dentro de hello.kt internal fun função3() {} //visível no mesmo módulo var nome = "Foo" //em todos os lugares get() = campo //visível dentro de hello.kt (igual aos seus atributos) private set(valor) { //visível dentro de hello.kt campo = valor {} private class class1 {} //visível dentro de hello.kt
A seguir, como os modificadores de visibilidade funcionam para os membros declarados dentro da classe (funções, propriedades):
modificador | descrição |
---|---|
public | visível para qualquer cliente que pode ver a declaração da classe |
private | visível apenas dentro da classe |
protected | visível dentro da classe e de suas subclasses |
internal | qualquer cliente que pode ver a declaração da classe dentro do módulo pode ver |
Atenção:Se você sobrescrever um membro protegido na classe derivada sem especificar sua visibilidade, sua visibilidade também será protegida.
Vamos dar um exemplo:
open class Base() { var a = 1 //por padrão é público private var b = 2 // classe Base privada protected open val c = 3 //visível para classes Base e Derived internal val d = 4 //visível no mesmo módulo protected fun e() { } //visível para classes Base e Derived {} class Derived: Base() { // a, c, d e e() todas as propriedades da classe Base são visíveis // b não é visível override val c = 9 // c é protegido {} fun main(args: Array<String>) { 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 derivado = Derived() // derived.c invisível {}
Por padrão, a visibilidade do construtor é public. Mas você pode alterá-lo. Para isso, você precisa explicitamente adicionar a palavra-chave constructor.
No exemplo a seguir, o construtor é público por padrão:
class Test(val a: Int) { // code {}
Você pode alterar sua visibilidade das seguintes maneiras.
class Test private constructor(val a: Int) { // code {}
Aqui, o construtor é private.
Atenção: Em Kotlin, as funções locais, variáveis e classes não podem ter modificadores de visibilidade.