kotlin:设置父类的默认值

时间:2018-07-27 15:06:48

标签: inheritance kotlin

我正在尝试为Kotlin中的父母和孩子班实现最简洁的组合。

这就像我的班级样子。

sealed class Parent {
 open val attribute : String = "initial value"
}

data class Child (
  override val attribute: String
) : Parent ()

如果构造函数Child()为空,我想将attribute的值设置为"initial value"

如果希望其他对象(不等于attribute,我想有机会通过构造函数设置Child对象的"initial value"

在科特林有可能吗?

1 个答案:

答案 0 :(得分:0)

这是让子类重用超类的初始值的一种方法(在出现data class Child之前,这是一个有效的答案):

sealed class Parent(val attribute : String = "initial value")

class Child : Parent {
  constructor() : super()
  constructor(attribute: String) : super(attribute)
}

这样,cou现在可以调用Child的默认构造函数,该构造函数将导致"initial value"或传递适当的属性。但是,这不适用于data class Child,因为您需要在那里有一个主构造函数。

以下将在调用“默认” "initial value"构造函数时将属性设置为Child

sealed class Parent {
  open val attribute : String = "initial value"
}

data class Child (override val attribute: String) : Parent() {
  constructor() : this("initial value")
}

实际上,它是一个辅助构造函数。 因为如果子类中没有主类,则只能调用超级构造函数,因此其余选项很小。您可能需要重新设计类的层次结构,或者只是在某个位置保留一些常量。