为什么基类中name为空

问题描述 投票:-1回答:1
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的。

kotlin inheritance
1个回答
0
投票

所以答案是基类对象处于不一致的状态,因为你已经覆盖了尚未初始化的子类。

© www.soinside.com 2019 - 2024. All rights reserved.