抽象的な宣言された保護されたアイテムの実装を満たすために、scalaがパブリック変数を許可する理由を誰かが説明できますか? 私の最初の仮定は、コンパイラが文句を言うだろうということでしたが、これが機能するかどうかを確認するための小さなテストを作成しました。驚いたことに、機能しました。これに利点はありますか?(おそらくこれは OOP では正常ですか?) 偶発的な落とし穴を回避する方法はありますか?
object NameConflict extends App {
abstract class A {
protected[this] var name:String
def speak = println(name)
}
class B(var name:String) extends A { //notice we've declared a public var
}
val t = new B("Tim")
t.speak
println(t.name) // name is exposed now?
}