我有一个来自Java库的基类,其代码我无法修改.这个类(A)有一个空方法(b),它应该被声明为abstract:
class A {
def b { }
}
Run Code Online (Sandbox Code Playgroud)
我在Scala中扩展此类并重写该方法以使其成为抽象:
abstract class AA extends A {
override def b
}
Run Code Online (Sandbox Code Playgroud)
现在我在一个特征中实现这个方法:
trait B {
def b { println("B") }
}
Run Code Online (Sandbox Code Playgroud)
如果我用特征B扩展AA,我会得到一个错误:在类A中覆盖方法b => Unit; 特征B中的方法b类型=>单位需要`覆盖'修饰符:
class C extends AA with B {}
Run Code Online (Sandbox Code Playgroud)
相反,如果代码是这样的,那么编译所有内容都没有错误,这对我来说似乎有些矛盾:
abstract class AA {
def b
}
trait B {
def b { println("B") }
}
class C extends AA with B {}
Run Code Online (Sandbox Code Playgroud)
我正在运行Scala 2.8.0RC3,并且对语言完全陌生(3天).另一个奇怪的和相关的行为是在制作b abstract时不需要覆盖标签:
abstract class AA extends A {
def b
}
Run Code Online (Sandbox Code Playgroud)