Невозможно скомпилировать внутреннюю причину вызова конструктора: ожидается основной вызов конструктора - PullRequest
0 голосов
/ 23 октября 2018

Предположим, у нас есть следующие первичные и вторичные конструкторы:

open class Animal(val name:String){
  internal constructor(message:InputStream): this(readName(message))
}

Почему невозможно вызвать внутренний конструктор суперкласса?

class Dog(name:String):Animal(name){
   internal constructor(message:InputStream):super(message)
                                             ^^^^^
                                             Primary constructor call expected
}

edit

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

class Dog:Animal{
   constructor(name:String):super(name)
   internal constructor(message:InputStream):super(message)

}

Это компиляторошибка?

1 Ответ

0 голосов
/ 23 октября 2018

Из документы :

Если класс имеет первичный конструктор, каждый вторичный конструктор должен делегировать первичному конструктору, прямо или косвенно, через другой вторичный конструктор (ы).).Передача другому конструктору того же класса осуществляется с помощью ключевого слова this

и:

Если у класса нет первичного конструктора, то каждый вторичный конструктор долженинициализируйте базовый тип с помощью ключевого слова super или делегируйте другому конструктору, который это делает.


Ваш класс Dog имеет первичный конструктор, поэтому необходимо делегировать егоиспользуя this.Если вы удалите основной конструктор, вы сможете ссылаться на super конструктор:

class Dog : Animal {
    constructor(message: InputStream) : super(message)
}

( вышеупомянутый не вызывает ошибок )

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