Scala - Zugriffsmodifikatoren
Dieses Kapitel führt Sie durch die Scala-Zugriffsmodifikatoren. Mitglieder von Paketen, Klassen oder Objekten können mit den Zugriffsmodifikatoren privat und geschützt gekennzeichnet werden. Wenn wir keines dieser beiden Schlüsselwörter verwenden, wird der Zugriff als öffentlich angenommen. Diese Modifikatoren beschränken den Zugriff auf die Mitglieder auf bestimmte Codebereiche. Um einen Zugriffsmodifikator zu verwenden, fügen Sie sein Schlüsselwort in die Definition der Mitglieder eines Pakets, einer Klasse oder eines Objekts ein, wie im folgenden Abschnitt gezeigt wird.
Private Mitglieder
Ein privates Mitglied ist nur innerhalb der Klasse oder des Objekts sichtbar, das die Elementdefinition enthält.
Es folgt das Beispielcode-Snippet zur Erläuterung des privaten Mitglieds -
Beispiel
class Outer {
class Inner {
private def f() { println("f") }
class InnerMost {
f() // OK
}
}
(new Inner).f() // Error: f is not accessible
}
In Scala der Zugang (neues Inneres). f () ist illegal, da f in Inner als privat deklariert ist und der Zugriff nicht innerhalb der Klasse Inner erfolgt. Im Gegensatz dazu ist der erste Zugriff auf f in der Klasse Innermost in Ordnung, da dieser Zugriff im Hauptteil der Klasse Inner enthalten ist. Java würde beide Zugriffe zulassen, da eine äußere Klasse auf private Mitglieder ihrer inneren Klassen zugreifen kann.
Geschützte Mitglieder
Auf ein geschütztes Mitglied kann nur von Unterklassen der Klasse zugegriffen werden, in der das Mitglied definiert ist.
Im Folgenden finden Sie das Beispielcode-Snippet zur Erläuterung des geschützten Mitglieds:
Beispiel
package p {
class Super {
protected def f() { println("f") }
}
class Sub extends Super {
f()
}
class Other {
(new Super).f() // Error: f is not accessible
}
}
Der Zugriff auf f in der Klasse Sub ist in Ordnung, da f in der Klasse 'Super' als geschützt deklariert ist und die Klasse 'Sub' eine Unterklasse von Super ist. Im Gegensatz dazu ist der Zugriff auf f in der Klasse 'Other' nicht zulässig, da die Klasse 'Other' nicht von der Klasse 'Super' erbt. In Java wäre der letztere Zugriff weiterhin zulässig, da sich die Klasse 'Other' im selben Paket befindet wie die Klasse 'Sub'.
Öffentliche Mitglieder
Im Gegensatz zu privaten und geschützten Mitgliedern ist es nicht erforderlich, ein öffentliches Schlüsselwort für öffentliche Mitglieder anzugeben. Es gibt keinen expliziten Modifikator für öffentliche Mitglieder. Auf solche Mitglieder kann von überall aus zugegriffen werden.
Das folgende Beispiel-Code-Snippet erklärt das öffentliche Mitglied:
Beispiel
class Outer {
class Inner {
def f() { println("f") }
class InnerMost {
f() // OK
}
}
(new Inner).f() // OK because now f() is public
}
Schutzumfang
Zugriffsmodifikatoren in Scala können durch Qualifikationsmerkmale erweitert werden. Ein Modifikator der Form privat [X] oder geschützt [X] bedeutet, dass der Zugriff "bis" X privat oder geschützt ist, wobei X ein umschließendes Paket, eine Klasse oder ein Singleton-Objekt bezeichnet.
Betrachten Sie das folgende Beispiel -
Beispiel
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 - die folgenden Punkte aus dem obigen Beispiel -
Variable workDetails sind für jede Klasse innerhalb des beiliegenden Pakets professional zugänglich.
Variable Freunde sind für jede Klasse innerhalb der einschließenden Paketgesellschaft zugänglich.
Auf Variablengeheimnisse kann nur für das implizite Objekt innerhalb der Instanzmethoden zugegriffen werden (this).