Scala - Modificateurs d'accès

Ce chapitre vous présente les modificateurs d'accès Scala. Les membres des packages, classes ou objets peuvent être étiquetés avec les modificateurs d'accès private et protected, et si nous n'utilisons aucun de ces deux mots-clés, alors l'accès sera considéré comme public. Ces modificateurs limitent les accès des membres à certaines régions de code. Pour utiliser un modificateur d'accès, vous incluez son mot-clé dans la définition des membres du package, de la classe ou de l'objet comme nous le verrons dans la section suivante.

Membres privés

Un membre privé est visible uniquement à l'intérieur de la classe ou de l'objet qui contient la définition de membre.

Voici l'exemple d'extrait de code pour expliquer le membre privé -

Exemple

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

Dans Scala, l'accès (nouveau Inner). f () est illégal parce que f est déclaré privé dans Inner et que l'accès ne provient pas de la classe Inner. En revanche, le premier accès à f dans la classe Innermost est OK, car cet accès est contenu dans le corps de la classe Inner. Java autoriserait les deux accès car il permet à une classe externe d'accéder aux membres privés de ses classes internes.

Membres protégés

Un membre protégé n'est accessible qu'à partir des sous-classes de la classe dans laquelle le membre est défini.

Voici l'exemple d'extrait de code pour expliquer le membre protégé -

Exemple

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

L'accès à f dans la classe Sub est OK car f est déclaré protégé dans la classe 'Super' et la classe 'Sub' est une sous-classe de Super. En revanche, l'accès à f dans la classe «Autre» n'est pas autorisé, car la classe «Autre» n'hérite pas de la classe «Super». En Java, ce dernier accès serait toujours autorisé car la classe 'Other' est dans le même package que la classe 'Sub'.

Membres publics

Contrairement aux membres privés et protégés, il n'est pas nécessaire de spécifier le mot clé Public pour les membres Public. Il n'y a pas de modificateur explicite pour les membres publics. Ces membres sont accessibles de n'importe où.

Voici l'exemple d'extrait de code pour expliquer le membre public -

Exemple

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

Portée de la protection

Les modificateurs d'accès dans Scala peuvent être augmentés avec des qualificatifs. Un modificateur de la forme private [X] ou protected [X] signifie que l'accès est privé ou protégé "jusqu'à" X, où X désigne un package, une classe ou un objet singleton englobant.

Prenons l'exemple suivant -

Exemple

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 - les points suivants de l'exemple ci-dessus -

  • Les détails de travail variables seront accessibles à toutes les classes du package professionnel.

  • Les amis variables seront accessibles à n'importe quelle classe au sein de la société de paquets englobants.

  • Les secrets de variable ne seront accessibles que sur l'objet implicite dans les méthodes d'instance (this).