En este artículo, aprenderá sobre los 4 modificadores de visibilidad en Kotlin y cómo funcionan en diferentes escenarios.
Los modificadores de visibilidad son palabras clave que establecen la visibilidad (accesibilidad) de clases, objetos, interfaz, constructores, funciones, propiedades y sus establecedores. (No puede establecer el modificador de visibilidad de los captadores, ya que siempre tienen la misma visibilidad que la de la propiedad).
En el artículo de Kotlin Class and Objects, aprendiste sobre los modificadores de visibilidad public
y private
en breve. Aprenderá sobre dos modificadores de visibilidad más protected
y internal
(así como public
y private
) en detalle.
Modificadores de visibilidad dentro del paquete
Un paquete organiza un conjunto de funciones, propiedades y clases, objetos e interfaces relacionados. Lectura recomendada: Paquetes de Kotlin
Modificador | Descripción |
---|---|
público | las declaraciones son visibles en todas partes |
privado | visible dentro del archivo que contiene la declaración |
interno | visible dentro del mismo módulo (un conjunto de archivos Kotlin compilados juntos) |
protegido | no disponible para paquetes (usado para subclases) |
Nota: Si no se especifica el modificador de visibilidad, lo es public
de forma predeterminada.
Tomemos un ejemplo:
// nombre de archivo: hello.kt paquete test fun function1 () () // público por defecto y visible en todas partes 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 () = campo // visible dentro de hello.kt (igual que su propiedad) conjunto privado (valor) (// visible dentro de hello.kt campo = valor) clase privada class1 () // visible dentro de hello.kt
Modificadores de visibilidad dentro de clases e interfaces
Así es como funcionan los modificadores de visibilidad para miembros (funciones, propiedades) declarados dentro de una clase:
Modificador | Descripción |
---|---|
público | visible para cualquier cliente que pueda ver la clase declarante |
privado | visible solo dentro de la clase |
protegido | visible dentro de la clase y sus subclases |
interno | visible para cualquier cliente dentro del módulo que pueda ver la clase declarante |
Nota: Si reemplaza un protected
miembro en la clase derivada sin especificar su visibilidad, su visibilidad también lo será protected
.
Tomemos un ejemplo:
open class Base () (var a = 1 // público por defecto privado var b = 2 // privado a la clase base protegido open val c = 3 // visible para la base y la clase derivada internal val d = 4 // visible dentro del mismo módulo protected fun e () () // visible para la clase Base y Derived) class Derived: Base () (// a, c, d, ye () de la clase Base son visibles // b no es visible anular val c = 9 // c está protegido) fun main (args: Array) (val base = Base () // base.a y base.d son visibles // base.b, base.cy base .e () no son visibles val derivado = Derivado () // derivado.c no es visible)
Cambiar la visibilidad de un constructor
Por defecto, la visibilidad de un constructor es public
. Sin embargo, puede cambiarlo. Para eso, debe agregar explícitamente la constructor
palabra clave.
El constructor es public
por defecto en el siguiente ejemplo:
class Test (val a: Int) (// código)
Así es como puede cambiar su visibilidad.
class Test constructor privado (val a: Int) (// código)
Aquí está el constructor private
.
Nota: En Kotlin, las funciones, variables y clases locales no pueden tener modificadores de visibilidad.