Latest web development tutorials

Scala Zugriffsmodifikator

Scala und Java Zugriffsmodifikatoren, wie Basis, jeweils: privat, geschützt, öffentlich.

Wenn Sie keinen Zugriff Modifikator-Zeichen, die standardmäßig angeben, werden die Zugriffsebene Scala Objekte Öffentlichkeit.

Scala-Qualifikationsspiel in private, die strenger sind als Java, im Fall von verschachtelten Klasse, die äußere Klasse kann nicht einmal verschachtelt Klasse Zugriff private Mitglieder werden.


Private (Private) Mitglieder

Geändert mit eigenem Stichwort, Mitglieder, die diese Markierung enthält nur die Klasse oder ein Objekt Mitglied interne sichtbar definiert, gilt die gleiche Regel auch für innere Klassen.

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

(New Inner) .f () ist eine weitere in der Inneren nicht legal, weil f als privat deklariert ist, aber der Zugang ist nicht in die Kategorie der Inneren.

Der Zugang f, aber es gibt kein Problem in der Innerste, weil dieser Besuch in der Klasse der Inneren enthalten ist.

Java ist der Zugriff auf beide erlaubt, weil es die äußeren Klasse Zugang private Mitglieder der inneren Klassen ermöglicht.


Schutz (geschützt) Mitglieder

In der scala, sind die Zugriffsschutz (geschützt) Mitglieder strenger als die java. Denn sie erlaubt nur den Schutz der Mitglieder der Unterklasse in dem Mitglied der Klasse definiert ist, wird abgerufen. In Java verwenden, um die Keyword-geschützten modifizierten Mitglieder, zusätzlich zu der Definition einer Unterklasse der Klasse kann das Element zugreifen, mit einem Paket von anderen Klassen auch zugegriffen werden kann.

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

Das obige Beispiel, Sub Zugriffstyp ist kein Problem für f, weil f erklärt wird, wie in der Super-geschützt, und Super Sub ist eine Unterklasse. Im Gegensatz dazu ist Andere keinen Zugriff auf die f erlaubt, weil es keine andere aus der Super geerbt ist. Während letztere auch in Java erkannt zu werden, weil mit anderen Teil in der gleichen Tasche.


Public (Öffentlich) Mitglieder

Scala, wenn Sie keine Modifikatoren angeben, ist der Standard Öffentlichkeit. Ein solches Element kann überall zugegriffen werden kann.

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

Der Schutzumfang

Scala kann der Zugriffsmodifikator unter Verwendung Qualifier betont werden. Das Format ist:

private[x] 

或 

protected[x]

Wo x zu einem Paket bezieht sich gehört zu einer Klasse oder Singleton-Objekt. Wenn in privaten [x] geschrieben, gelesen "Zusätzlich zu den Mitgliedern des [...] oder in der Klasse [...] der Klassen in Paketen und deren zugehörigen Bild sichtbar auf der Außenseite, für alle anderen Klassen sind privat.

Diese Technik ist in einer Reihe von großen Projekten im Paket nützlich, mit dem Sie mehrere Unterpaket in Ihrem Projekt sichtbar externen Kunden, aber das Projekt hat immer unsichtbaren Dinge zu definieren.

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
        }
    }
}

Das obige Beispiel die Klasse Navigator ist als privat markiert [bobsrockets] Das ist die Klasse aller Klassen und im Paket bobsrockets sichtbar enthaltenen Objekte.

Zum Beispiel aus dem Fahrzeug Zugriff auf das Objekt im Navigator erlaubt ist, da das Objekt Fahrzeug in dem Paket enthalten Start, während in bobsrockets Paket starten, im Gegenteil, den gesamten Code außerhalb des Pakets bobsrockets Klasse Navigator zugreifen können.