Scala 在使用抽象方法时重写该方法

Scala 在使用抽象方法时重写该方法,scala,overriding,Scala,Overriding,我想做这样的事情 abstract class Foo { def bar:String def modifiedFoo:Foo = new Foo(){ override def bar = super.bar+"\n" } } 但这是不合法的(“Foo类中的方法栏是从super访问的, 它不能是抽象的,除非它被声明为抽象的成员重写 并覆盖“仅对性状合法的inturn” 我可以将方法移到modifiedFoo 进入带有签名modifiedFoo(fo

我想做这样的事情

abstract class Foo {

    def bar:String
    def modifiedFoo:Foo = new Foo(){
        override def bar = super.bar+"\n"
    }
}
但这是不合法的(“Foo类中的方法栏是从super访问的, 它不能是抽象的,除非它被声明为抽象的成员重写 并覆盖“仅对性状合法的inturn”

我可以将方法移到modifiedFoo 进入带有签名modifiedFoo(foo:foo)的伴随对象,但这是 不那么优雅。
你如何处理这个问题

我想你可以用以下方式使用
self

abstract class Foo {

  self: Foo =>

  def bar: String

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

}

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

abstract class Foo {

  self: Foo =>

  def bar: String

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

}