Котлин первичных и вторичных конструкторов при наследовании
Я изучаю Kotlin, и я немного застрял с конструкторами. Я написал программу, которая поможет мне понять концепцию. Программа выглядит следующим образом:
open class Animal(){
var name :String = "noname";
constructor(name:String):this(){
this.name = name
}
open fun eat(){
println("$name the animal is eating")
}
}
class Dog: Animal{
constructor():super()
constructor(name : String):super(name)
override fun eat(){
println("$name the dog is eating")
}
}
fun main (args:Array<String>){
var a1 = Animal("foo")
var a2 = Animal()
var d1 = Dog("bar")
var d2 = Dog()
a1.eat()
a2.eat()
d1.eat()
d2.eat()
}
Можно ли изменить программу так, чтобы дочерний класс вызывал первичный конструктор родителя, не используя другой вторичный конструктор.
Здесь я пытаюсь не заставлять пользователя передавать параметр при создании объектов с использованием первичных и вторичных конструкторов.
Пожалуйста, прости меня, если мой вопрос тупой. Я новичок здесь.
1 ответ
В Kotlin вы можете установить значение по умолчанию в самом конструкторе:
open class Animal(var name: String = "noname"){
open fun eat(){
println("$name the animal is eating")
}
}
class Dog(name: String = "noname"): Animal(name){
override fun eat(){
println("$name the dog is eating")
}
}
Таким образом, "noname" назначается, если строка не указана при вызове конструктора. Кроме того, когда вы создаете объект Dog, он всегда вызывает родительский конструктор.