題目描述為什么第一個gender打印出來的是null題目來源及自己的思路我已經初試化了val gender: String = "male" ,但是貌似結果不對。相關代碼object ObjectExample { def main(args: Array[String]): Unit = { val student = new Student("zhu", 18, "zz")
}
class People(val name: String, val age: Int) {
println("constructor")
println(name) val gender: String = "male"
println(gender) def this(name1: String) = { this("ci", 18)
println("subconstructor")
println(name)
}
}
class Student(name: String, age: Int, val school: String) extends People(name, age){
println("derived constructor")
println(name)
println(school) override val gender: String = "female"
println(gender)
}
}錯誤信息constructor
zhu
null
derived constructor
zhu
zz
female
1 回答

牧羊人nacy
TA貢獻1862條經驗 獲得超7個贊
把class移到外面仍然是無效的。
我對這個理解就是,val類型不能被初始化兩次。如果非要用重寫來“初試化”兩次,那么編譯器就會忽略父類的初始化,而去使用子類的初始化,而此時子類的初始化并沒有執行,所以只能是null。改成lazy類型就可以了,當然了,還有其他更多的方法。參考資料見Variable has been Initialized in Scala class, but what it print is null?(這個問題是我提出的)。scala官網也有解釋WHY IS MY ABSTRACT OR OVERRIDDEN VAL NULL?
- 1 回答
- 0 關注
- 779 瀏覽
添加回答
舉報
0/150
提交
取消