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