我有一个抽象方法和具体实现方法的特性,所以像这样:
trait MyTrait extends BaseClass {
def myAbstractMethod: MyReturnType
def myConcreteMethod = { /*implementation*/ }
}
现在我混合了这个特性:
class MyClass extends BaseClass with MyTrait {
}
BaseClass没有实现抽象方法。我期望scala编译器在混合特征时强制执行抽象方法(就像Java接口一样)。但是没有编译器错误。
我的具体情况比较复杂。我无法测试运行时会发生什么。
答案 0 :(得分:6)
你肯定会遇到编译错误......
scala> :paste
// Entering paste mode (ctrl-D to finish)
trait MyTrait extends BaseClass {
def myAbstractMethod: MyReturnType
def myConcreteMethod = { /*implementation*/ }
}
class MyClass extends BaseClass with MyTrait {
}
// Exiting paste mode, now interpreting.
<console>:14: error: class MyClass needs to be abstract, since method myAbstractMethod in trait MyTrait of type => MyReturnType is not defined
class MyClass extends BaseClass with MyTrait {
^