Конструктор в Котлине

Недавно началось с Котлина

Согласно документам Котлина, может быть один первичный конструктор и один или несколько вторичных конструкторов.

Я не понимаю, почему я вижу эту ошибку введите описание изображения здесь

Поскольку test класса не имеет первичного конструктора.

Это прекрасно работает:

 open class test { } class test2 : test() { } 

И вот еще одна трудность, с которой я столкнулся, когда я определяю вторичный конструктор, IDE показывает еще одну ошибку:

Инициализация супертипа невозможна без основного конструктора введите описание изображения здесь

Но в предыдущем рабочем примере я инициализировал его, но он работал нормально. Что я ошибся?

Вы получаете эту ошибку, потому что, даже если вы не определяете первичный или вторичный конструктор в базовом классе, по-прежнему существует конструктор no-argument по умолчанию, сгенерированный для этого класса. Конструктор производного класса должен всегда вызывать некоторые из суперконструкторов, и в вашем случае есть только по умолчанию (это конструктор, который вы можете вызвать как test() для создания объекта класса). Компилятор и IDE заставляют вас это делать.


Правила супер-конструктора в какой-то степени усложняют этот вопрос.

Если вы определяете вторичный конструктор в производном классе без указания основного конструктора (без круглых скобок рядом с объявлением класса), тогда сам второй конструктор должен вызвать супер-конструктор, и в объявлении класса не должны указываться аргументы суперконструктора:

 class test2 : test { // no arguments for `test` here constructor(a: Int) : super() { /* ... */ } } 

Другой вариант – определить первичный конструктор и вызвать его из вторичного:

 class test2() : test() { constructor(a: Int) : this() { /* ... */ } } 
Intereting Posts
Spring Boot @Autowired с Kotlin в @Service всегда имеет значение null Как вернуть список с ненулевым элементом, с карты? Smartcasting на и с платформы типа в kotlin Как преобразовать CharArray / Array <Char> в строку? Нулевой указатель в поле зрения, когда запускается проверка андроида. Ссылка KClass для значений с нулевым значением Как написать надлежащий тест для реактивного репозитория интерфейса, который возвращает Observable только в том случае, когда есть какое-то событие, как издеваться над запуском этого события Возвращение из лямбда или Котлина: здесь не допускается возвращение Как настроить динамические опорные точки для поворота анимации Использовать метод / свойство расширения по всему миру Kotlin: Android-приложение неожиданно останавливается из-за textView Позиционирование раздутого представления внутри пользовательского макета Kotlin – Разница между циклами «forEachIndexed» и «for in» Правильно ли написана документация Котлина? Kapt generatestubs – невозможно инициализировать объект с помощью внутреннего конструктора из unit-test