Классы данных работают иначе, чем обычные классы.Как вы уже заметили, классы данных требуют свойств в конструкторах.Классы данных и наследование сложно, потому что вы не можете передать значения, как в обычных классах.И наследование от класса данных также невозможно;они не поддерживают open
или abstract
, что означает, что оно окончательно и не может быть унаследовано от.
По сути, это невозможно, если у вас есть класс данных в качестве дочернего:
class Something(something: Int, else: Int) : Parent (something, else)
Однако, Kotlin поддерживает абстрактные var
s и val
s.Если вам абсолютно необходим класс данных в детстве (хотя я не рекомендую этого; использование обычного класса может быть лучше в зависимости от вашего варианта использования).
abstract class SuperClass {
protected abstract val privateVal: Int
}
data class Overridden(override val privateVal: Int) : SuperClass()
Здесь он переопределяет val в конструкторе, то есть он все равно будет работать.Причина в том, что он protected
, а не private
, в том, что он не сможет наследовать, если он private
.
Опять же, я действительно рекомендую использовать обычные классы вместо классов данных.