Ich hatte gerade Schwierigkeiten, Scala zu lernen. Ich habe eine Vererbungshierarchie, die im Wesentlichen äquivalent dazu ist:Geschützte Mitglieder anderer Instanzen in Scala
class A {
protected def myMethod() = println("myMethod() from A")
}
class B extends A {
def invokeMyMethod(a: A) = a.myMethod()
}
aber versuchen, diese Probe zu kompilieren, erhalte ich die Fehlermeldung „test.scala: 7: Fehler: Methode myMethod kann nicht in A zugegriffen werden“.
Aus Java kommend, ist mein Verständnis, dass geschützte Mitglieder zu jedem Zeitpunkt von einer abgeleiteten Klasse zugänglich sein sollten, und nirgends habe ich etwas gesehen, das mir sagt, dass geschützte Mitglieder in Scala durch Instanzen begrenzt sind. Hat jemand eine Erklärung dafür?
Diese Erklärung sagt eigentlich nicht, warum der OP-Code nicht funktioniert. 'B' ist eine abgeleitete Art von' A', genau wie es sein soll. –
'B' ist abgeleitet von' A', aber es versucht nicht auf seinen eigenen geschützten Member 'myMethod' zuzugreifen, sondern auf den einer anderen Instanz, den Parameter' a: A'. Ein geschütztes Member ist nur für die _instance sichtbar, die es enthält (standardmäßig kann dies jedoch mit der von mir erwähnten Scoping-Anmerkung geändert werden). –
Das widerspricht eher der von Ihnen zitierten Passage: "einschließlich anderer Instanzen des gleichen Typs und aller abgeleiteten Typen." – Submonoid