【问题标题】:Inheritance and method overriding in ScalaScala中的继承和方法覆盖
【发布时间】:2014-05-05 00:14:03
【问题描述】:

当我们有以下基本类时

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 的超类。如果有人能解释一下,我将不胜感激。

【问题讨论】:

    标签: scala inheritance overriding dynamic-binding


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 2019-04-27
      • 2015-09-19
      • 2012-11-20
      • 2016-06-04
      相关资源
      最近更新 更多