Modificadores de Acceso, Public, Protected, Private en Kotlin

access control

Para hacer una clase «extensible» o «heredable» en Kotlin, tenemos que marcarlo como open.

 – Clase en Java   –> por defecto open 

 – Clase en Kotlin –> por defecto es final (no puede ser extendida sin el uso de ‘open’)

Modificadores de Acceso:

– public –> Visible desde dentro de la clase, de sus subclases y desde fuera

– protected –> Sólo visible dentro de la clase y de sus subclases (herencia)

– private –> Sólo visible dentro de la clase

 

open class AccessModifiers {

    val prop1 = "Public by default"
    private val prop2 = "Marked as private"
    protected val prop3 = "Marked as protected"

    protected fun showCase(){
        val test = AccessModifiers()
        test.prop1 
        test.prop2 
        test.prop3  

        this.prop1
        prop1
    }
}

class AccessModifiedChild : AccessModifiers(){
    private fun showCaseX(){
        super.showCase();
        prop1
        this.prop1
//      prop2 //Por ser private no puede ser accesible
        this.prop3
    }
}

class AnotherClass{
    private fun showCase(){
        val test = AccessModifiers()
        test.prop1

    }
}

 

Clase AccessModifiers

La marcamos como open para que puedan heredar de ella

showCase()

La marcamos como protected para que otras clases que hereden de AccessModifiers puedan utilizarla.

val test

Es una objecto de la clase AccessModifiers.

Puede acceder a las 3 propiedades (test.prop1, test.prop2 y test.prop3 ) aún siendo una instancia externa, porque esta dentro del contexto de AccessModifiers.

El this.prop1 y prop1 apunta a la propiedad de la clase, no al de la instancia.

Clase AccessModifiedChild

Puede heredar de la clase AccessModifiers porque la marcamos como «open»

Al heredar de la clase AccessModifiers no podemos nombrar una función con el mismo nombre que la que implementa el padre, por eso la llamamos showCaseX().

 showCaseX()

prop1 y this.prop1 se refiere al de la clase padre.

prop2 no nos deja acceder porque es privado y la propiedad sólo visible dentro de la clase

prop3 si nos deja acceder porque es protected y es una subclase (herencia).

Clase AnotherClass()

Es una clase externa totalmente a AccessModified

 showCaseX()

test es una instancia de la clase AccessModified

Solamente nos deja llamar a la propiedad de la clase prop1 porque es la única marcada como publica.

prop2 es una propiedad solo visible dentro de la clase

prop3 es una propiedad visible dentro de la clase y de sus herederos.

Por tanto, al no heredar de dicha clase, solamente se nos muestra las propiedades publicas.