Scala中的继承和方法重写



当我们有以下基本类

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)

因为据我所知,AnyRefArray的超类,就像XY的超类一样。如果有人能解释一下,我将非常感激。

如果您查看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
                ^

相关内容

  • 没有找到相关文章

最新更新