Котлин первичных и вторичных конструкторов при наследовании - PullRequest
0 голосов
/ 11 мая 2018

Я изучаю 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 Ответ

0 голосов
/ 11 мая 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...