为什么我有:
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
为了获得我想要的东西?是不是继承了父类的特征?如果他们可以实现父母自己定义的方法的很大一部分,怎么会这样呢?如果是这样,那么论证是什么?
答案 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的实例可能会使用该方法。