私はScalaを学んでいるうちに苦労しました。私はこれと本質的に同等である継承階層を持っている:Scalaの他のインスタンスの保護されたメンバー
class A {
protected def myMethod() = println("myMethod() from A")
}
class B extends A {
def invokeMyMethod(a: A) = a.myMethod()
}
しかし、このサンプル、私はエラーを取得をコンパイルしようとしている「test.scala:7:error:メソッドをMyMethodははAにアクセスすることはできません」。
Javaからは、保護されたメンバーは派生クラスからアクセスできる必要があり、Scalaの保護されたメンバーはインスタンスによって制限されているとは言いませんでした。誰にもこれについての説明がありますか?
この説明は、OPのコードが機能しない理由を実際には示していません。 'B' _は、' A'の派生型です。 –
'B'は' A'から派生していますが、それ自身の保護されたメンバ 'myMethod'ではなく、別のインスタンスのパラメータである' a:A'にアクセスしようとしています。プロテクトされたメンバはit_を含む_instanceにのみ可視です(既定では、これは私が述べたスコープの注釈で変更できます)。 –
これはあなたが引用した通りに「これと同じ型の他のインスタンスと派生型を含む」というやり方とむしろ矛盾しています。 – Submonoid