Хорошо, я не ответил на "Как это исправить?" но я надеюсь, что это помогает прояснить, что происходит

с Noob здесь, я пробираюсь через начинающего UdemyКотлин Конечно, и я не могу понять, почему мой параметр возраста не используется, когда я использую свой производный класс, но будет работать, когда используется мой базовый класс.

Персональный класс

open class Person(open var firstname: String, open var surname: String,
          open var age: Int) {

val thisyear: Int = Calendar.getInstance().get(Calendar.YEAR)

val dob = thisyear - age

fun printperson() {

    println("$firstname $surname was born in $dob")

}
}

Студенческий класс

class Student(override var firstname: String, override var surname: 
                String, override var age: Int, val studentID: Int):    
                    Person(firstname, surname, age) {

fun returnDetails() {

    println("Hello $firstname, your Student ID is: $studentID")
}
}

Главный

fun main(args: Array<String>) {

val studentMike = Student(firstname = "Mike", 
                  surname = "Stand", age = 67, studentID = 8899)

studentMike.printperson()
studentMike.returnDetails()

val personBill = Person(firstname = "Bill", surname = "Hook", age = 34)
personBill.printperson()

}

Выход

Mike Stand was born in 2018
Hello Mike, your Student ID is: 8899
Bill Hook was born in 1984

Как вы можете видеть, Билл непосредственно использовал метод в классе Person, в то время как Майк был косвенным вызовом, параметр age должен был быть унаследован от класса Person через класс Student ...

Глядя на официальные документы Kotlin, похоже, что проблема связана с "Порядок инициализации производного класса«Но я не могу понять, как это исправить.

Спасибо за вашу помощь,

PS извиняюсь за неточную терминологию. Всегда рады указателям, чтобы сделать лучше.

Ответы на вопрос(1)

Ваш ответ на вопрос