Kotlin的主要构造函数+ Call Super构造函数

时间:2019-08-23 22:47:31

标签: inheritance kotlin constructor

open class Foo constructor(a: Int) {
    private val _a: Int = a
}

open class Bar : Foo {
    constructor(a: Int, b: Int) : super(a) {
        // doSomething
    }
    constructor(a: Int, b: String) : super(a) {
        // doSomething
    }
}

我想将“ Bar”类的“ constructor(a:Int,b:Int)”作为主要构造函数,并调用超类的构造函数。怎么写?

1 个答案:

答案 0 :(得分:3)

像普通一样声明您的主要构造函数,并使用其参数“调用”继承的类的构造函数。然后将您的主要构造函数逻辑移至init块中:

open class Bar(a: Int, b: Int) : Foo(a) {
    init {
        // [1] init block serves as primary constructor body
    }

    constructor(a: Int, b: String) : this(a, b.toInt()) {
        // [2] doSomething
    }
}

这将施加以下约束:

  1. 辅助构造函数必须调用主构造函数。这意味着您必须能够转换参数或为参数提供默认值。
  2. 将同时调用构造函数和init块(按顺序:[1]和[2])。
  3. 您要限制您的类仅使用父类中的单个构造函数。如果它具有多个构造函数,并且您想在子类中进行匹配并调用它们,则不能使用主构造函数。