Latest web development tutorials

Scala modificateur d'accès

Scala et Java modificateurs d'accès, comme base, respectivement: privé, protégé, public.

Si vous ne spécifiez pas un caractère de modificateur d'accès, par défaut, les objets Scala de niveau d'accès sont publiques.

Scala qualificatif dans les membres privés privés, l'accès des classes plus strictes que Java, dans le cas de la classe imbriquée, la classe externe ne peut même pas être imbriqué.


Les membres privés (Private)

Modifié avec mot clé privée, les membres avec cette marque contient l'élément de classe ou d'un objet défini interne visible, la même règle vaut également pour les classes internes.

class Outer{
    class Inner{
    private def f(){println("f")}
    class InnerMost{
        f() // 正确
        }
    }
    (new Inner).f() //错误
}

(New Inner) .f () l'accès est pas légal en interne parce que f est déclarée comme privée, mais l'accès est pas dans la catégorie des Inner.

Accès f mais il n'y a pas de problème à Intime, parce que cette visite est inclus dans la classe interne.

Java est autorisé à accéder à la fois, car elle permet aux membres privés d'accès aux classes externes des classes internes.


Protection des membres (protégées)

Dans la scala, la protection de l'accès des membres (protégées) sont plus strictes que la java. Parce qu'il permet seulement la protection des membres de la sous-classe est définie dans le membre de la classe est accessible. En java, utilisez les mots clés membres protégés modifiés, en plus de la définition d'une sous-classe de la classe peut accéder au membre, avec un paquet d'autres classes peut également être consulté.

package p{
class Super{
    protected def f() {println("f")}
    }
	class Sub extends Super{
	    f()
	}
	class Other{
		(new Super).f() //错误
	}
}

L'exemple ci-dessus, sous type d'accès ne sont pas un problème pour f, parce que f est déclarée comme protégée dans le Super et Super Sub est une sous-classe. En revanche, d'autres ne sont pas autorisés à accéder au f, parce qu'il n'y a pas d'autre hérité de Super. Alors que ce dernier étant également reconnu en java, car avec les autres sous dans le même sac.


membres (publics) publics

Scala, si vous ne spécifiez pas de modificateurs, la valeur par défaut est public. Un tel élément peut être consulté partout.

class Outer {
   class Inner {
      def f() { println("f") }
      class InnerMost {
         f() // 正确
      }
   }
   (new Inner).f() // 正确因为 f() 是 public
}

La portée de la protection

Scala, le modificateur d'accès peut être souligné en utilisant des qualificatifs. Le format est le suivant:

private[x] 

或 

protected[x]

Où x se réfère à un paquet appartient à une classe ou d'un objet singleton. Si écrit en privé [x], lire «En plus des membres de la [...] ou dans la classe [...] des classes dans les packages et leur image associée visibles à l'extérieur, pour toutes les autres classes sont privées.

Cette technique est utile dans un certain nombre de grands projets dans le paquet, ce qui vous permet de définir plusieurs sous-package dans vos projets clients externes visibles, mais le projet a toujours des choses invisibles.

package bobsrocckets{
    package navigation{
        private[bobsrockets] class Navigator{
         protected[navigation] def useStarChart(){}
         class LegOfJourney{
             private[Navigator] val distance = 100
             }
            private[this] var speed = 200
            }
        }
        package launch{
        import navigation._
        object Vehicle{
        private[launch] val guide = new Navigator
        }
    }
}

L'exemple ci-dessus, le navigateur de classe est marqué comme privé [bobsrockets] Telle est la classe de toutes les classes et les objets contenus dans le package bobsrockets visible.

Par exemple, de l'accès des véhicules à l'objet dans le navigateur est permis parce que le véhicule de l'objet inclus dans le lancement de l'emballage, alors que dans bobsrockets lancer ensemble, au contraire, tout le code en dehors des bobsrockets de package peut accéder à la classe Navigator.