Ответ 1
Вы получаете эту ошибку, потому что, даже если вы не определяете первичный или вторичный конструктор в базовом классе, по-прежнему существует конструктор no-argument по умолчанию, сгенерированный для этого класса. Конструктор производного класса должен всегда вызывать некоторые из суперконструкторов, и в вашем случае есть только по умолчанию (это конструктор, который вы можете назвать как test()
для создания объекта класса). Компилятор и IDE заставляют вас это делать.
Правила супер-конструктора в некоторой степени усложняют вопрос.
Если вы определяете вторичный конструктор в производном классе без определения основного конструктора (нет круглых скобок рядом с объявлением класса), тогда сам второй конструктор должен вызывать супер-конструктор, и никакие аргументы супер-конструктора не должны указываться в объявлении класса
class test2 : test { // no arguments for `test` here
constructor(a: Int) : super() { /* ... */ }
}
Другой вариант - определить первичный конструктор и вызвать его из вторичного:
class test2() : test() {
constructor(a: Int) : this() { /* ... */ }
}