Modificadores de visibilidad de Kotlin

En Kotlin, los modificadores de visibilidad se usan para restringir la accesibilidad de clases, objetos, interfaces, constructores, funciones, propiedades y sus configuradores a un cierto nivel. No es necesario establecer la visibilidad de los captadores porque tienen la misma visibilidad que la propiedad.
Hay cuatro modificadores de visibilidad en Kotlin. 

Si no hay un modificador especificado, por defecto es público . Comencemos discutiendo los modificadores anteriores uno por uno.

1. Modificador público

En Kotlin, el modificador predeterminado es public . Es posiblemente el modificador más utilizado en todo el lenguaje y existen restricciones adicionales sobre quién puede ver el elemento que se está modificando. A diferencia de Java, en Kotlin no hay necesidad de declarar nada como public – es el modificador predeterminado, si no declaramos otro modificador – public funciona igual en Kotlin que en Java. Cuando aplicamos el modificador público a elementos de nivel superior: clases, funciones o variables declaradas directamente dentro de un paquete, entonces cualquier otro código puede acceder a él. Si aplicamos el modificador público a un elemento anidado, una clase interna o una función dentro de una clase, entonces cualquier código que pueda acceder al contenedor también puede acceder a este elemento.

Kotlin

// by default public
class A {            
    var int = 10
}
 
// specified with public modifier
public class B {    
    var int2 = 20
    fun display() { 
    println("Accessible everywhere")        
    }
}

Aquí, las Clases A y B son accesibles desde cualquier parte del código completo, las variables int , int2 y la función display() son accesibles desde cualquier cosa que pueda acceder a las clases A y B.

2. Modificador privado

En Kotlin, los modificadores privados solo permiten el acceso al código declarado dentro del mismo ámbito . No permite el acceso a la variable o función modificadora fuera del alcance . A diferencia de Java, Kotlin permite múltiples declaraciones de nivel superior en el mismo archivo: todo lo demás en el mismo archivo puede acceder a un elemento privado de nivel superior.

Kotlin

// class A is accessible from same source file
private class A {
    private val int = 10
    fun display()
    {
        // we can access int in the same class
        println(int)  
        println("Accessing int successful")
    }
}
fun main(args: Array<String>){
    var a = A()
    a.display()
    // can not access 'int': it is private in class A
    println(a.int) 
}

Producción: 

Cannot access 'int': it is private in 'A'

Aquí, solo se puede acceder a la clase A desde el mismo archivo fuente, y solo se puede acceder a la variable int desde el interior de la clase A. Cuando intentamos acceder a int desde fuera de la clase, se produce un error de tiempo de compilación. 

3. Modificador Interno

En Kotlin, el modificador interno es un modificador recién agregado que no es compatible con Java. Marcado como interno significa que estará disponible en el mismo módulo, si intentamos acceder a la declaración desde otro módulo dará error. Un módulo significa un grupo de archivos que se compilan juntos.

Nota: Beneficios del modificador interno al escribir API e implementaciones. 

Kotlin

internal class A {
}
public class B {
    internal val int = 10
    internal fun display() {
    }
}

Aquí, solo se puede acceder a la clase A desde el interior del mismo módulo. La variable int y la función display() solo son accesibles desde dentro del mismo módulo, aunque se puede acceder a la clase B desde cualquier lugar. 

4. Modificador protegido

En Kotlin, el modificador protected permite estrictamente el acceso a la clase declarante y sus subclases. El modificador protected no se puede declarar en el nivel superior. En el siguiente programa, hemos accedido a la variable int en la función getvalue() de la clase derivada. 

Kotlin

// base class
open class A {
      // protected variable
    protected val int = 10
}
 
// derived class
class B: A() {
    fun getvalue(): Int {
          // accessed from the subclass
        return int        
    }
}
 
fun main(args: Array<String>) {
    var a = B()
    println("The value of integer is: "+a.getvalue())
}

Producción: 

The value of integer is: 10

Anulación del modificador protegido

Necesitamos marcar la variable o función protegida usando palabras clave abiertas para anular en la clase derivada. En el siguiente programa, hemos anulado la variable  int .

Kotlin

// base class
open class A {
     // protected variable
    open protected val int = 10
 
}
 
// derived class
class B: A() {
   override val int = 20
    fun getvalue():Int {
          // accessed from the subclass
        return int        
    }
}
 
fun main(args: Array<String>) {
    var a = B()
    println("The overridden value of integer is: "+a.getvalue())
}

Producción: 

The value of integer is: 20

Visibilidad del constructor

Por defecto, los constructores son públicos , pero también podemos cambiar la visibilidad de un constructor usando los modificadores.  

class A (name : String) {
      // other code
}

Debemos especificar esto explícitamente usando la palabra clave constructor mientras cambiamos la visibilidad.  

class A private constructor (name : String) {
      // other code
}

Publicación traducida automáticamente

Artículo escrito por Praveenruhil y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *