Подход, предложенный в ответе @ Januson, очень приятный и чистый, когда вы не используете / определите первичный конструктор в подклассе B
.Если вы попытаетесь это сделать, вы получите ошибки компилятора, потому что вспомогательные конструкторы должны вызывать первичный конструктор и не могут напрямую вызывать конструкторы суперкласса.
Если вам B
подклассу нужно определить первичный конструктор, вы можете обратиться кпроблема определения значения по умолчанию как константы в A
' сопутствующем объекте и его использования в основных конструкторах A
и B
следующим образом:
open class A(val x: Int = DefaultX) {
companion object {
val DefaultX:Int = 238;
}
}
class B(y: Int, x: Int = DefaultX) : A(x)
Таким образом, вы определяете эквивалент переменной Java static final
, имеющей область действия A
.
Вы должны ссылаться на константу A.DefaultX
суперкласса в подклассе B
, но выне нужно дублировать его значение как в классе A
, так и в классе B
...