使用方法

时间:2017-02-04 10:05:24

标签: scala override

我想做这样的事情

abstract class Foo {

    def bar:String
    def modifiedFoo:Foo = new Foo(){
        override def bar = super.bar+"\n"
    }
}

但这不合法("类Foo中的方法栏是从super访问的, 除非被声明为abstract的成员覆盖,否则它可能不是抽象的 并覆盖"其中只对Traits合法。

我可以移动方法modifiedFoo 使用签名modifiedFoo(foo:Foo)进入伴随对象,但这是 不太优雅。 你怎么处理这个问题?

1 个答案:

答案 0 :(得分:2)

我认为您可以通过以下方式使用self

abstract class Foo {

  self: Foo =>

  def bar: String

  def modifiedFoo: Foo = new Foo() {
    override def bar = self.bar + "\n"
  }

}