クラスAとAをスーパークラスに持つBを定義します。 class A { def m = { printf("CLASS A") } }
class B extends A { override def m = { printf("CLASS B") } def f = { printf("method f") } }
それぞれインスタンス作って実行するとクラスA, クラスBの動作をします。 val a = new A val b = new B scala> a.m CLASS A scala> b.m CLASS B scala>
2つのインスタンスを持つMapを作成します。 val c = Map("a" -> a, "b" -> b)
マップのキーからそれぞれのオブジェクトを呼び出しメソッドを実行すると正しいクラスのメソッドが実行されます。 scala> c("a").m CLASS A scala> c("b").m CLASS B
しかし、overrideしていないメソッドはmemberでないとおこられてしまいます。 scala> c("b").f <console>:11: error: value f is not a member of A c("b").f ^ これはなぜでしょう。また、overrideしていないサブクラスだけのメソッドを実行する方法はありますでしょうか?