open class Super(val value: Int) { constructor(value: Super) : this(value.value) } class Sub(value: Int) : Super(value) { constructor(value: Sub) : super(value) }Наследник не компилируется, сообщая, что нельзя использовать
super
в данном контексте, а надо использовать this
. Покурив документацию, я всё-таки написал требуемую мне иерархию:class SubOK : Super { constructor(value: Int) : super(value) constructor(value: SubOK) : super(value) }Это не лишено некоторой логики: если определяется конструктор по-умолчанию, то остальные конструкторы должны использовать только его. Во втором случае у класса
SubOK
нет конструктора по-умолчанию, а оба конструктора равноправны. Но на мой взгляд, логика достаточно спорная, да и добавляет лишнюю строку кода.PS. Коллеги подсказывают, что похожее поведение у Scala.
Комментариев нет:
Отправить комментарий