次の特性とその特性を拡張するクラスがあるとします
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でこれを行う他の方法はありますか?