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 actualprotected
: Marca una declaración como visible en la clase y subclases de la mismainternal
: Marca una declaración como visible en el módulo actualpublic
: 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í:
Modificador | Declaración Nivel Superior |
---|---|
public | Visible en todas partes |
internal | Visible en el módulo actual |
protected | No disponible |
private | Visible 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:
Modificador | Miembro De Clase |
---|---|
public | Visible en todo lugar |
internal | Visible en el módulo |
protected | Visible en las subclases |
privated | Visible 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.