Modificadores de Visibilidad en Kotlin – público, protegido, interno, privado

En este tutorial, discutiremos los diversos Modificadores de Visibilidad disponibles en la programación Kotlin.

Modificadores de Visibilidad en Kotlin

Los Modificadores de Visibilidad son modificadores que, cuando se añaden a una clase/interface/propiedad/función en Kotlin, definen dónde es visible y desde dónde se puede acceder. Los setters de propiedades en Kotlin pueden tener un modificador separado de la propiedad. Los getters no pueden tener un modificador de visibilidad definido. Utilizan el mismo modificador que la propiedad. A continuación se muestran los modificadores de visibilidad:

  • 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 las declaraciones anteriores están en el nivel superior del archivo. TODAS son públicas. Si no mencionamos la declaración de los miembros de la clase, son públicos (a menos que sean sobreescritos).

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
    }
}

Clases que no son subclases de Pr no pueden acceder a las declaraciones de i. Las declaraciones protegidas, cuando se sobrescriben, tendrán el mismo modificador protegido en la subclase a menos que las cambies explícitamente.

open class Pr{
    open protected val i = 0
}

class Another : Pr(){

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

El concepto de modificadores protegidos en Kotlin, definido anteriormente, difiere del de Java.

Modificador Interno

Internal es un nuevo modificador disponible en Kotlin que no existe en Java. Establecer una declaración como interna significa que estará disponible solo en el mismo módulo. Por módulo en Kotlin, nos referimos a un grupo de archivos que se compilan juntos.

internal class A {
}

internal val x = 0

Estas no serán visibles fuera del módulo actual. Los modificadores internos son útiles cuando necesitas ocultar implementaciones específicas de la biblioteca a los usuarios. Esto no era posible con la visibilidad de paquete privado en Java.

Modificadores Privados

Los modificadores privados no permiten que las declaraciones sean visibles fuera del ámbito actual.

var setterVisibility: String = "abc"
private set

open class Pr{
    open protected val i = 0

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

Dado que Kotlin permite múltiples definiciones de nivel superior, el código anterior funciona. Lo siguiente no 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 defecto, las clases tienen constructores públicos. Dondequiera que vaya la clase, el constructor la sigue. Necesitamos establecer el modificador de visibilidad en el constructor en la propia definición. Así que Kotlin utiliza los modificadores protegido e interno de manera diferente a Java. Además, el modificador predeterminado de Java es package-private, lo cual no existe aún en Kotlin. Esto pone fin a este breve tutorial sobre Modificadores de Visibilidad en Kotlin.

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