Scala子类继承父类的特征?

non*_*com 1 inheritance scala

为什么我有:

trait T {
  def method(a: Int)
}

class A extends T {
  //...
}

class B extends A {
  //...
}
Run Code Online (Sandbox Code Playgroud)

那时当我这样做:

//...
val b = new B
b.method(15)
//...
Run Code Online (Sandbox Code Playgroud)

method()被认为是未定义对于B?为什么我必须明确说出来

class B extends A with T
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*che 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
Run Code Online (Sandbox Code Playgroud)


Ant*_*era 5

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

在Trait A中添加这样的方法体:

def method(a: Int)={
    //do something useful here
}
Run Code Online (Sandbox Code Playgroud)

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