Kotlin: Как наследовать свойство в классе данных

У меня есть абстрактный класс токена, объявленный следующим образом:

abstract class Token(var index: Int = 0) { open fun merge(toMerge: Token): Token? { return null } } 

Я хочу наследовать свойство index в классе данных, например:

 data class CloseLoop(index: Int, var openLoopIndex: Int = 0) : Token(index) 

Но это дает мне ошибку. Data class primary constructor must have only property (val / var) parameters

Что я должен сделать, чтобы исправить это?

Есть, по крайней мере, два метода обхода:

  • Сделать свойство open и переопределить его в объявлении основного конструктора класса данных:

     abstract class Token(open var index: Int = 0) data class CloseLoop( override var index: Int, var openLoopIndex: Int = 0 ) : Token(index) 
  • Объявите свойство с другим именем и инициализируйте его базовым классом:

     data class CloseLoop(val theIndex: Int, var openLoopIndex: Int = 0) : Token(theIndex) 

    Сделайте его private если найдете его уместным.