当我们有以下基本类
class X {
def f = println("X")
}
class Y extends X {
override def f = println("Y")
}
val a : X = Y
我想我很高兴为什么我们得到
scala> a.f
Y
但是我不明白为什么我们有
scala> val b : AnyRef = new Array(10)
scala> b(0)
<console>:9: error: AnyRef does not take parameters
b(0)
因为据我所知,AnyRef
是Array
的超类,就像X
是Y
的超类一样。如果有人能解释一下,我将非常感激。
如果您查看AnyRef
的API文档,您将注意到它没有提供apply
方法-因此错误是有意义的。
你可以看到同样的行为,如果你改变你的例子,添加一个方法Y
, X
不可用:
class X {
def f = println("X")
}
class Y extends X {
override def f = println("Y")
def f2 = println("Not in X")
}
val a : X = new Y
scala> a.f2
<console>:11: error: value f2 is not a member of X
a.f2
^