来自java初始化问题的scala继承

时间:2013-11-13 22:41:34

标签: java scala

假设我在java中有以下类:

class A
{
        public A()
        {
                init();
        }

        void init()
        {
                System.out.println("A:init()");
        }
}

然后我在scala中继承它,如下所示:

class B extends A {

        var x = 3

        override def init(): Unit = println("init: x = " + x)
}       

当我构造B的实例时,我的init覆盖中x的值当然不会是3,因为它在该阶段尚未初始化。如果我无法更改java类,那么有人可以推荐最好的方法来确保我的类字段在调用init()时已初始化。

由于

1 个答案:

答案 0 :(得分:0)

您可以将该变量放入伴随对象中,然后执行

override def init(): Unit = println("init: x = " + B.x)

其中B被声明为:

object B {
  val x = 3
}

您还可以在x内定义/初始化init()