Junior
¿Qué son los modificadores de visibilidad y cómo usarlos en Kotlin?
sobes.tech AI
Respuesta de la IA
Los modificadores de visibilidad en Kotlin determinan la accesibilidad de las declaraciones (clases, interfaces, funciones, propiedades) para otras partes del programa.
Los principales modificadores de visibilidad:
public: Visible en todas partes. Es el modificador por defecto.internal: Visible solo dentro de un módulo. Se considera un conjunto de archivos Kotlin compilados juntos.protected: Visible dentro de la clase y sus subclases (incluyendo miembros definidos en clases heredadas). No visible fuera del paquete.private: Visible solo dentro del archivo en el que se declara. Para miembros de clase, solo dentro de esa clase (y su objeto companion, clases anidadas e internas).
Aplicación de modificadores:
- A clases, interfaces, objetos y sus constructores.
- A funciones, propiedades y sus getters/setters en el nivel superior (fuera de clases).
- A miembros de clase (clases anidadas, internas, funciones, propiedades).
Ejemplo:
// Archivo: example.kt
private const val PRIVATE_CONSTANT = 1 // Visible solo en este archivo
internal fun internalFunction() { // Visible solo dentro del módulo
println("Función interna llamada")
}
open class BaseClass {
protected val protectedProperty = "Protegido" // Visible en esta clase y sus subclases
fun publicMethod() { // Visible en todas partes (public por defecto)
println("Método público llamado")
}
private fun privateMethod() { // Visible solo dentro de BaseClass
println("Método privado llamado")
}
}
class DerivedClass : BaseClass() {
fun accessProtected() {
println("Accediendo a la propiedad protegida: $protectedProperty") // Acceso a protected
// privateMethod() // Error: private no visible en la subclase
}
}
fun main() {
val base = BaseClass()
base.publicMethod()
// base.protectedProperty // Error: protected no visible fuera de la clase y subclases
val derived = DerivedClass()
derived.accessProtected()
internalFunction()
// PRIVATE_CONSTANT // Error: private a nivel superior visible solo en el archivo de declaración
}
| Modificador | Accesibilidad | Dónde usar |
|---|---|---|
public |
En todas partes | Por defecto, cuando no se especifica otro modificador |
internal |
Dentro del módulo | Para API dentro de una biblioteca o módulo |
protected |
Dentro de la clase y sus subclases (para miembros) | Para crear jerarquías de clases con herencia |
private |
Dentro del archivo (nivel superior); dentro de la clase (miembros) | Para ocultar detalles de implementación dentro del archivo o clase |