open class Vehicle {
inner class Engine {
var specs: String = ""
constructor() {
specs = getSpecs()
}
}
val engine = Engine()
open fun getSpecs(): String {
return ""
}
}
class Bike: Vehicle() {
private val model: Model = Model("APACHE", "YAMAHA")
private val year = 2024
override fun getSpecs(): String {
return "Model: ${model.company} - ${model.modelName}. Year: $year"
}
}
data class Model(
val modelName: String,
val company: String
)
当我创建 Bike 类的对象时,上面的代码抛出空指针异常。
线程“main”中的异常java.lang.NullPointerException:不能 调用“Model.getCompany()”,因为“this.model”为 null
我确实明白为什么会调用异常。
我不明白的是,当我删除 getSpecs 方法中的 model.company 和 model.modelName (当我不调用原始类型以外的任何类时)时,它工作正常。
我不知道为什么会发生这种情况,当我尝试获取年份变量时,它是否也应该抛出异常,因为它也没有初始化?
超类构造函数在 Bike 构造函数之前调用。 Vehicule 在其构造函数中调用 getSpecs,该函数在 Bike 类中被重写,需要一个 Bike 类中尚不存在的模型。