English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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).
Un paquete organiza un grupo de funciones, propiedades y clases, objetos y interfaces relacionados.
Modificador | Descripción |
---|---|
public | Visible en todas partes |
private | Visible dentro del archivo que contiene la declaración |
internal | Visible dentro del mismo módulo (un grupo de archivos Kotlin compilados juntos) |
protected | No 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
A continuación, se describe cómo funcionan los modificadores de visibilidad para las declaraciones de miembros (funciones, propiedades) dentro de una clase:
Modificador | Descripción |
---|---|
public | Visible para cualquier cliente que pueda ver la declaración de la clase |
private | Visible solo dentro de la clase |
protected | Visible dentro de la clase y sus subclases |
internal | Cualquier 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 {}
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.