Scala - Modificadores de acceso

Este capítulo lo lleva a través de los modificadores de acceso de Scala. Los miembros de paquetes, clases u objetos pueden etiquetarse con los modificadores de acceso como privado y protegido, y si no usamos ninguna de estas dos palabras clave, el acceso se asumirá como público. Estos modificadores restringen el acceso de los miembros a ciertas regiones de código. Para usar un modificador de acceso, debes incluir su palabra clave en la definición de miembros de paquete, clase u objeto como veremos en la siguiente sección.

Miembros privados

Un miembro privado es visible solo dentro de la clase u objeto que contiene la definición del miembro.

A continuación se muestra el fragmento de código de ejemplo para explicar el miembro privado:

Ejemplo

class Outer {
   class Inner {
      private def f() { println("f") }
      
      class InnerMost {
         f() // OK
      }
   }
   (new Inner).f() // Error: f is not accessible
}

En Scala, el acceso (nuevo Inner). f () es ilegal porque f se declara privada en Inner y el acceso no es desde dentro de la clase Inner. Por el contrario, el primer acceso af en la clase Innermost está bien, porque ese acceso está contenido en el cuerpo de la clase Inner. Java permitiría ambos accesos porque permite que una clase externa acceda a miembros privados de sus clases internas.

Miembros protegidos

Un miembro protegido solo es accesible desde subclases de la clase en la que está definido el miembro.

A continuación se muestra el fragmento de código de ejemplo para explicar el miembro protegido:

Ejemplo

package p {
   class Super {
      protected def f() { println("f") }
   }
   
   class Sub extends Super {
      f()
   }
   
   class Other {
      (new Super).f() // Error: f is not accessible
   }
}

El acceso af en la clase Sub está bien porque f se declara protegido en la clase 'Super' y la clase 'Sub' es una subclase de Super. Por el contrario, el acceso af en la clase 'Otro' no está permitido, porque la clase 'Otro' no hereda de la clase 'Super'. En Java, el último acceso todavía estaría permitido porque la clase 'Otro' está en el mismo paquete que la clase 'Sub'.

Miembros públicos

A diferencia de los miembros privados y protegidos, no es necesario especificar la palabra clave pública para los miembros públicos. No existe un modificador explícito para los miembros públicos. Se puede acceder a dichos miembros desde cualquier lugar.

A continuación se muestra el fragmento de código de ejemplo para explicar el miembro público:

Ejemplo

class Outer {
   class Inner {
      def f() { println("f") }
      
      class InnerMost {
         f() // OK
      }
   }
   (new Inner).f() // OK because now f() is public
}

Alcance de la protección

Los modificadores de acceso en Scala se pueden aumentar con calificadores. Un modificador de la forma private [X] o protected [X] significa que el acceso es privado o protegido "hasta" X, donde X designa algún paquete, clase u objeto singleton adjunto.

Considere el siguiente ejemplo:

Ejemplo

package society {
   package professional {
      class Executive {
         private[professional] var workDetails = null
         private[society] var friends = null
         private[this] var secrets = null

         def help(another : Executive) {
            println(another.workDetails)
            println(another.secrets) //ERROR
         }
      }
   }
}

Note - los siguientes puntos del ejemplo anterior -

  • WorkDetails variables serán accesibles a cualquier clase dentro del paquete adjunto profesional.

  • Los amigos variables estarán disponibles para cualquier clase dentro de la sociedad del paquete adjunto.

  • Los secretos de las variables serán accesibles solo en el objeto implícito dentro de los métodos de instancia (this).