我有一個來自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