次の特性とその特性を拡張するクラスがあるとします
trait T { protected def f() }
class C extends T { def f(): println("!") }
object Main extends App {
val c = new C
c.f() // should be a compile error
}
の宣言のf
ようprotected
に宣言したT
ので、 のスコープ内から呼び出すことができますがC
、他の人からは呼び出すことができません。つまり、C.f()
コンパイルエラーになるはずです。protected
からの修飾子T
が引き継がれると思っていましたが、そうではありません。
C.f()
の宣言のようprotected
に再宣言することもできC
ますが、繰り返す必要はありません。Scalaでこれを行う他の方法はありますか?