Scala中的继承和方法重写

Scala中的继承和方法重写,scala,inheritance,overriding,dynamic-binding,Scala,Inheritance,Overriding,Dynamic Binding,当我们有以下基本课程 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: AnyRe

当我们有以下基本课程

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)
scala>val b:AnyRef=新数组(10)
scala>b(0)
:9:错误:AnyRef不接受参数
b(0)

因为据我所知,
AnyRef
Array
的超类,这与
X
Y
的超类的方式类似。如果有人能解释这一点,我将不胜感激。

如果您查看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
                ^
X类{
def f=println(“X”)
}
类Y扩展X{
覆盖def=println(“Y”)
def f2=println(“不在X中”)
}
val a:X=新Y
scala>a.f2
:11:错误:值f2不是X的成员
a、 f2
^