我有一个来自Java库的基类,其代码无法修改。这个类(A)有一个空的方法(b)应已被定义为抽象的,而不是:实现具有特征的不一致编译器行为的抽象方法?
class A {
def b { }
}
我在斯卡拉这个类扩展和覆盖的方法,使其摘要:
abstract class AA extends A {
override def b
}
现在我实现的性状此方法:
trait B {
def b { println("B") }
}
如果我延伸与性状b AA,得到了一个错误:在类型=>单位的A类覆盖方法b;在型性状B 方法B =>单元需要'覆盖”修饰符:
class C extends AA with B {}
相反,如果代码已经这个样子,一切都编译没有错误,这似乎有点矛盾对我说:
abstract class AA {
def b
}
trait B {
def b { println("B") }
}
class C extends AA with B {}
我正在运行Scala 2.8.0RC3,并且完全是新的语言(3天)。另一个奇怪的和相关的行为是做b抽象当制动标签是没有必要的:
abstract class AA extends A {
def b
}
这与你想通过混合你自己的'def toString():String'实现来代替Java类的Java toString实现是一样的吗? – huynhjl 2010-07-04 15:24:50
不,这不是一回事。在这种情况下,编译器的行为总是有意义的,因为它不明确应该使用哪个定义:Java toString或者mixin。 在我的情况下,只有一个可用,但。 – 2010-07-04 21:48:38