trait A {
def a
def b
def c
}
object A {
def apply = {
new A {
def a = 1
def b = 2
def c = 3
}
}
}
在这里看到我有一个特征A,伴侣对象的apply方法实现它。
trait B extends A {
def d
}
object B {
def apply = {
new B {
def d = 4
}
}
}
Trait B当然不会编译,因为我还必须实现A的a / b / c方法,但有没有办法可以调用A的apply方法然后只实现B的方法?
我想覆盖B.apply中的/ b / c并且只调用super.a / b / c是一种方式,但如果它有多个层A-> B-> C-> D ,我不想覆盖叶节点中的所有超类的方法。
任何想法都会有所帮助,谢谢!
答案 0 :(得分:1)
如果您可以更改A
,我认为最合理的解决方案是为A.apply()
返回的匿名类命名:
object A {
class AImpl extends A {
def a = 1
def b = 2
def c = 3
}
def apply = new AImpl
}
object B {
def apply = {
new AImpl with B {
def d = 4
}
}
}
我想覆盖B.apply中的/ b / c而只是调用super.a / b / c是单向的
不,那不行。如果确实如此,就没有必要覆盖它们。