2015-02-11 79 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