2015-02-11 78 views
2

存在着(外面的我的代碼)製作繼承VAL公共

trait Foo { 
    protected val bar = 0 
} 

我想有一個類FooImpl擴展Foo,使bar公衆。

我聽說子類可以增加他們繼承成員的可見性。

我該怎麼做?


我試圖

class FooImpl extends Foo { 
    override val logger = super.logger 
} 

但得到的錯誤:

super may be not be used on value logger 

回答

1

你可以增加的方法知名度。

當您聲明具有更大可見度的字段時,您可以聲明新字段

2

它可以工作,如果你讓logger def而不是val。

trait Foo { 
    protected def logger = 0 
} 

class FooImpl extends Foo { 
    override val logger = super.logger 
} 

如果Foo不是由您定義,你可能是出於運氣涉及反射的解決方案之外。

請參閱thisthis

+0

難道你不能反過來使用'def'嗎? '覆蓋def logger = super.logger'? – lmm 2015-02-11 12:07:30

+0

好像不是這樣嗎?除非你的意思是讓他們都成爲defs。 – 2015-02-11 12:17:51

+0

@lmm,不,我也試過。 – 2015-02-11 16:16:39