Ich lerne Scala mit den Übungen aus dem Buch "Scala for the Impatient". Eine Übung fragt das:
Die Datei Stack.scala enthält die Definition
class Stack[+A] protected (protected val elems: List[A])
Erläutern Sie die Bedeutung der
protected
-Schlüsselwörter.
Kann mir jemand helfen, das zu verstehen? protected
ist offensichtlich sinnvoll für Member-Variablen, aber welche Bedeutung hat es in einer Klassendefinition?
In Scala schreiben
%Vor%implementiert auch einen Standardkonstruktor. Wenn Sie Java kennen, dann wäre das in Java so etwas wie
%Vor% Nun haben Sie in Ihrem Beispiel zwei protected
Keywords:
protected val elems: List[A]
protected (/*...*/)
Der erste Eintrag macht die Variable elems
protected, dh sie kann nur von Unterklassen von Stack[+A]
aufgerufen (und im Schatten gehalten) werden.
Die zweite Option macht den Konstruktor schreibgeschützt. Dies bedeutet, dass eine neue Stack
-Instanz nur von Unterklassen von Stack[+A]
erstellt werden kann.
Auch hier wäre der entsprechende Java-Code so etwas wie
%Vor%Tags und Links scala class generics covariance protected