Согласно документ :
Если класс имеет первичный конструктор, каждый вторичный конструктор
необходимо делегировать первичному конструктору напрямую или
косвенно через другой вторичный конструктор (ы). Делегирование другому конструктору того же класса выполняется с помощью ключевого слова this
Вы объявляете первичный конструктор для B
(т.е. B()
), поэтому вторичный конструктор должен вызывать свой первичный конструктор.
Как дочерний класс может вызывать вторичный конструктор родителя?
Если вы хотите, чтобы вторичный конструктор вызывал вторичный конструктор родителя, вы должны сначала удалить первичный конструктор B
.
abstract class A(val i: Int) {
constructor(c: C) : this(c.i)
}
class B : A {
constructor(c: C) : super(c)
}
class C(val i: Int)