我想創建一個特性,混合時將用一個方法替換一個方法的默認定義,調用原始方法,然後操作結果。調用scala中的自我類型特性的超類方法
這裏就是我想要做的事:
class Foo {
def bar() : String = "Foos bar"
}
trait OtherStuff {
self : Foo =>
def bar() : String = self.bar() + " with OtherStuff"
}
class Quux extends Foo with OtherStuff
如果這個工作我想它,然後(new Quux).bar
將現在回到Foos bar with OtherStuff
的方式。不幸的是,它不工作的方式 - 我得到的是:
<console>:6: error: error overriding method bar in class Foo of type()String;
method bar in trait OtherStuff of type()String needs `override' modifier
class Quux extends Foo with OtherStuff
但是如果我定義OtherStuff
時使用override
,我得到:
<console>:7: error: method bar overrides nothing
override def bar() : String = self.bar() + " with OtherStuff"
是否有可能重寫的方法自我使用特質?如果沒有,會改變OtherStuff
是一個特質是extends Foo
而不是一個具有自我型Foo
做什麼壞事所有存在說出類似
class WhatEver extends Foo with Xyz with Pqr with OtherStuff with Abc
我在斯卡拉2.7使用的代碼。 7因爲這是一個構建規則,我們還沒有將我們的sbt項目升級到0.10.x版本。 (我們依賴的插件還沒有準備好)
如果OtherStuff在我的邏輯中不是Foo呢?沒有extendig Foo沒有另一種解決方案嗎?或者我在這裏濫用自我打字? – Radian
@Dupont:爲什麼Quux類應該使用OtherStuff擴展Foo,而不是擴展OtherStuff並從繼承中獲得Foo? – polo