Котлин первичных и вторичных конструкторов при наследовании

Я изучаю 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, он всегда вызывает родительский конструктор.

Другие вопросы по тегам