Хорошо, я не ответил на "Как это исправить?" но я надеюсь, что это помогает прояснить, что происходит
с 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 извиняюсь за неточную терминологию. Всегда рады указателям, чтобы сделать лучше.