问题
错误代码如下
object Obj3 { def main(args: Array[String]): Unit = { val u31 = new User3(20) println(u31.age) } } class User3(var name: String) { var age: Int = _ // 辅助构造器1 def this() = { // 注意: 首行必须是调用自己的主构造器 this("lisi") } //辅助构造器2 def this(age: Int) = { this(false) } //辅助构造器3 def this(a: Boolean) = { this() println(a) } }
想实现的逻辑是:
辅助构造器2调用辅助构造器3 ——》辅助构造器3调用辅助构造器1——》辅助构造器1调用主构造器完成实例化
结果运行时报错
Error:(28, 9) called constructor's definition must precede calling constructor's definition
this(false)
原因
Scala中要求被调用的构造器要在调用之前声明,我是这么理解的,辅助构造器可以看作主构造器中的函数,函数是要先声明再使用的
正确代码如下
object Obj3 { def main(args: Array[String]): Unit = { val u31 = new User3(20) println(u31.age) } } class User3(var name: String) { var age: Int = _ // 辅助构造器1 def this() = { // 注意: 首行必须是调用自己的主构造器 this("lisi") } //辅助构造器3 def this(a: Boolean) = { this() println(a) } //辅助构造器2 def this(age: Int) = { this(false) } }