Modificadores de Visibilidade Kotlin – público, protegido, interno, privado

No tutorial de hoje, discutiremos os vários Modificadores de Visibilidade disponíveis na programação Kotlin.

Modificadores de Visibilidade em Kotlin

Os Modificadores de Visibilidade são modificadores que, quando anexados a uma classe/interface/propriedade/função em Kotlin, definiriam onde tudo é visível e de onde tudo pode ser acessado. Os setters de propriedades em Kotlin podem ter um modificador separado da propriedade. Os getters não podem ter um modificador de visibilidade definido. Eles usam o mesmo modificador que a propriedade. A seguir estão os modificadores de visibilidade:

  • public
  • protected
  • internal
  • private

Modificador Público

A Public Modifier is the default modifier in Kotlin. Just like the Java public modifier, it means that the declaration is visible everywhere.


class Hello{
}

public class H{
}

fun hi()
public fun hello()

val i = 0
public val j = 5

Todas as declarações acima estão no topo do arquivo. TODAS são públicas. Se não mencionarmos a declaração dos membros da classe, eles são públicos (a menos que sejam sobrepostos).

Modificador Protegido

A Protected Modifier in Kotlin: CANNOT be set on top-level declarations. Declarations that are protected in a class, can be accessed only in their subclasses.

open class Pr{
    protected val i = 0
}

class Another : Pr{

    fun iValue() : Int
    {
        return i
    }
}

Classes que não são subclasses de Pr não podem acessar i. Declarações protegidas, quando sobrescritas, teriam o mesmo modificador protegido na subclasse, a menos que você as altere explicitamente.

open class Pr{
    open protected val i = 0
}

class Another : Pr(){

    fun iValue() : Int
    {
        return i
    }
    
    override val i = 5 //protected visibility
}

O conceito de Modificadores Protegidos em Kotlin, conforme definido acima, difere do Java.

Modificador Interno

Interno é um novo modificador disponível no Kotlin que não existe no Java. Ao definir uma declaração como interna, significa que estará disponível apenas no mesmo módulo. Por módulo em Kotlin, entendemos um grupo de arquivos compilados juntos.

internal class A {
}

internal val x = 0

Esses não serão visíveis fora do módulo atual. Modificadores Internos são úteis quando é necessário ocultar implementações específicas de bibliotecas dos usuários. Isso não era possível usando a visibilidade package-private no Java.

Modificadores Privados

Os modificadores privados não permitem que as declarações sejam visíveis fora do escopo atual.

var setterVisibility: String = "abc"
private set

open class Pr{
    open protected val i = 0

    fun iValue() : Int
    {
        setterVisibility = 10
        return setterVisibility
    }
}

Dado que o Kotlin permite múltiplas definições no nível superior, o código acima funciona. O abaixo não funciona.

private open class ABC{
    private val x = 6
}

private class BDE : ABC()
{
    fun getX()
    {
        return x //x cannot be accessed here.
    }
}

x is visibile only from inside its class. We can set private constructors in the following way:

class PRIV private constructor(a: String) {
 ... 
}

Por padrão, as classes têm construtores públicos. Onde quer que a classe vá, o construtor a segue. Precisamos definir o modificador de visibilidade no próprio construtor. Assim, o Kotlin usa os modificadores protegido e interno de forma diferente do Java. Além disso, o modificador padrão do Java é pacote-privado, o que não existe no Kotlin, ainda. Isso encerra este breve tutorial sobre Modificadores de Visibilidade no Kotlin.

Source:
https://www.digitalocean.com/community/tutorials/kotlin-visibility-modifiers-public-protected-internal-private