Modificadores De Visibilidad En Kotlin

En este tutorial discutiremos sobre el uso de los modificadores de visibilidad en Kotlin, con el fin de restringir el uso de clases, objetos, interfaces, constructores, funciones, propiedades y sus setters.

Restricciones De Visibilidad En Kotlin

Kotlin nos provee las siguientes palabras claves de modificadores, para restringir la visibilidad de las declaraciones:

  • private: Marca una declaración como visible en la clase o archivo actual
  • protected: Marca una declaración como visible en la clase y subclases de la misma
  • internal: Marca una declaración como visible en el módulo actual
  • public: Marca una declaración como visible en todas partes

Si omites el modificador en una declaración, el valor por defecto asignado será public junto a final.

Declaraciones De Nivel Superior

Cuando una declaración de nivel superior es ubicada en un archivo Kotlin, los modificadores la restringen así:

ModificadorDeclaración Nivel Superior
publicVisible en todas partes
internalVisible en el módulo actual
protectedNo disponible
privateVisible en el archivo

Por ejemplo:

// Nombre del archivo: TopLevel.kt

public val propiedad = "Propiedad" // Visible en cualquier lugar

private fun funcion() = println("Función") // Visible solo en TopLevel.kt

internal class Clase // Visible solo en el módulo "main"

Clases E Interfaces

En el caso de las clases e interfaces, sus miembros son afectados de la siguiente manera:

ModificadorMiembro De Clase
publicVisible en todo lugar
internalVisible en el módulo
protectedVisible en las subclases
privatedVisible solo en la clase actual

Por ejemplo:

open class A {
    public var m1 = 10
    internal var m2 = "Propiedad interna"

    private fun m3() = println("Método privado")

    protected open fun m4() = m1 + 10
}


class B : A() {
    // m1 es visible pero no se puede sobrescribir

    // m2 es visible pero no se puede sobrescribir

    // m3 no es visible

    // m4 es visible y se puede sobrescribir
    public override fun m4() = m1 + 100
}

Nota: el modificador open habilita la sobrescritura de un miembro por una subclase. Es lo contrario a final. Y el modificador override aplica la sobrescritura desde la subclase.

Visibilidad De Constructores

Por defecto los constructores tienen definido el modificador public. Si deseas cambiar su restricción, incluye la palabra reservada constructor y antepón el modificador.

class Table(height: Int)

class Eraser internal constructor(val dimen: Int)

open class Pencil protected constructor(val mark: String)

class Book private constructor(val pages: Int)

El modificador protected es equivalente a private si la clase sigue siendo final. Por lo que si la marcas con open será visible para las subclases.

¿Ha sido útil esta publicación?