Scala子类继承父类的特征?

时间:2012-01-21 08:42:19

标签: scala inheritance

为什么我有:

trait T {
  def method(a: Int)
}

class A extends T {
  //...
}

class B extends A {
  //...
}

然后当我这样做时:

//...
val b = new B
b.method(15)
//...

据说method()未定义为B?为什么我必须明确说出

class B extends A with T

为了获得我想要的东西?是不是继承了父类的特征?如果他们可以实现父母自己定义的方法的很大一部分,怎么会这样呢?如果是这样,那么论证是什么?

2 个答案:

答案 0 :(得分:8)

我认为您刚刚没有实现方法method,因为我在计算机上测试了它并且以下代码有效:

scala> trait T {
 | def method(a:Int) =a
 | }
defined trait T

scala> class A extends T
defined class A

scala> class B extends A
defined class B

scala> val b = new B
b: B = B@164a40a0

scala> b.method(11)
res25: Int = 11

答案 1 :(得分:5)

您的代码无法编译,因为该方法永远不会实现。 B无法实例化,因为类都是抽象的。

在特质A:

中添加这样的方法体
def method(a: Int)={
    //do something useful here
}

然后编译,并且没有错误,事实上,B的实例可能会使用该方法。