よくあることですがあるメソッド overrideする時に元のメソッドをoverrideしたメソッドを呼び出すことがありますね
trait Fuge {
def doSomething(): Unit = println("hello");
}
trait Hoge extends Fuge {
override def doSomething(): Unit = super.doSomething()
}
ところでsuper経由で呼び出すメソッドが抽象メソッドだとこういう場合コンパイルが通りません
trait Test {
def doTest(): Unit
}
trait BeforAndAfterTest extends Test {
override def doTest(): Unit = {
println("befor");
super.doTest();
println("after");
}
}
こういう時にoverrideと一緒にabstractもつけるとコンパイルが通ります
trait Test {
def doTest(): Unit
}
trait BeforAndAfterTest extends Test {
abstract override def doTest(): Unit = {
println("befor");
super.doTest();
println("after");
}
}
abstract override それほど使うケースがないのであまり知られていませんね
それでは快適なscala lifeを