在scala中调用超类apply方法

时间:2017-10-24 08:58:20

标签: scala inheritance apply multiple-inheritance companion-object

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 ,我不想覆盖叶节点中的所有超类的方法。

任何想法都会有所帮助,谢谢!

1 个答案:

答案 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是单向的

不,那不行。如果确实如此,就没有必要覆盖它们。