English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Modificadores de visibilidad en Kotlin

En este artículo, conocerá4de varios modificadores de visibilidad y cómo funcionan en diferentes situaciones.

Los modificadores de visibilidad son las palabras clave utilizadas para establecer la visibilidad (accesibilidad) de las clases, objetos, interfaces, constructores, funciones, propiedades y sus configuradores. (No se puede establecer el modificador de visibilidad para los getters, ya que siempre tienen la misma visibilidad que las propiedades).

EnClase y objeto en KotlinEn el artículo, conoció brevemente los modificadores de visibilidad public y private. En este artículo, se profundizará en otros dos modificadores de visibilidad: protected y internal (así como public y private).

Los modificadores de visibilidad dentro del paquete

Un paquete organiza un grupo de funciones, propiedades y clases, objetos y interfaces relacionados.

ModificadorDescripción
publicVisible en todas partes
privateVisible dentro del archivo que contiene la declaración
internalVisible dentro del mismo módulo (un grupo de archivos Kotlin compilados juntos)
protectedNo se puede usar en paquetes (para subclases)

Nota:Si no se especifica un modificador de visibilidad, el valor por defecto es public.

Vamos a dar un ejemplo:

//Nombre del archivo: hello.kt
package test
fun function1() {}   //Por defecto es pública y visible en cualquier lugar
private fun function2() {}   //Visible dentro de hello.kt
internal fun function3() {}   //Visible dentro del mismo módulo
var name = "Foo"   //Visible en todas partes
    get() = field   //Visible dentro de hello.kt (igual que sus propiedades)
    private set(value) {   //Visible dentro de hello.kt
        field = value
    {}
private class class1 {}   //Visible dentro de hello.kt

Modificadores de visibilidad en clases e interfaces

A continuación, se describe cómo funcionan los modificadores de visibilidad para las declaraciones de miembros (funciones, propiedades) dentro de una clase:

ModificadorDescripción
publicVisible para cualquier cliente que pueda ver la declaración de la clase
privateVisible solo dentro de la clase
protectedVisible dentro de la clase y sus subclases
internalCualquier cliente que pueda ver la declaración de la clase dentro del módulo puede verla

Nota:Si sobrescribes un miembro protected en la clase derivada sin especificar su visibilidad, también tendrá visibilidad protected.

Vamos a dar un ejemplo:

open class Base() {
    var a = 1                 //Por defecto es pública
    private var b = 2         // La clase Base es privada
    protected open val c = 3  //Visible para Base y Derived
    internal val d = 4        //Visible dentro del mismo módulo
    protected fun e() { }     //Visible para Base y Derived
{}
class Derived: Base() {
    // a, c, d y e() son todas las propiedades de la clase Base visibles
    // b no es visible
    override val c = 9        // c es protected
{}
fun main(args: Array<String>) {
    val base = Base()
    //base.a y base.d son visibles
    // base.b, base.c y base.e() no son visibles
    val derived = Derived()
    // derived.c no visible
{}

Cambiar la visibilidad del constructor

Por defecto, la visibilidad del constructor es pública. Pero puedes cambiarla. Para hacerlo, necesitas agregar explícitamente la palabra clave constructor.

En el siguiente ejemplo, el constructor es público por defecto:

class Test(val a: Int) {
    // code
{}

Puedes cambiar su visibilidad mediante los siguientes métodos.

class Test private constructor(val a: Int) {
    // code
{}

Este constructor es private.

Nota:  En Kotlin, las funciones locales, variables y clases no pueden tener modificadores de visibilidad.