open class Base( open val name : String){
init {
println("initializing base with name = $name")
}
open val size : Int = name.length.also {
println("Initializing size in base with $it")
}
}
class Derived constructor(override val name: String, val lastName : String) : Base(name){
override val size : Int = (name.length + lastName.length).also {
println("Initialzing derived size with $it")
}
}
fun main(){
val derived = Derived("Tarun", "Chawla")
var base : Base = derived
println(base.size)
}
当它运行时,它抛出null异常,kotlin怎么也看不到。
Exception in thread "main" java.lang.NullPointerException
at Base.<init>(main.kt:5)
at Derived.<init>(main.kt:9)
at MainKt.main(main.kt:15)
at MainKt.main(main.kt)
首先我不明白为什么base类中的name是null,以及它是如何绕过kotlin的。
所以答案是基类对象处于不一致的状态,因为你已经覆盖了尚未初始化的子类。