初始化子构造函数中的抽象类字段

时间:2017-03-04 20:49:42

标签: inheritance kotlin

我有抽象的A类和一些字段

public abstract class A {
    var name: String = "Empty name"
}

并希望继承它

public class B(name: String) : A() {
    init {
        this.name = name
    }
}

有没有办法不创建init块并像name一样执行class B(::name: String)的单行初始化?

3 个答案:

答案 0 :(得分:1)

不,对于未在父类primary constructor中声明的属性,无法做到这一点。

但您可以转换添加主构造函数的示例:

public abstract class A(var name: String = "Empty name")

public class B(name: String) : A(name)

答案 1 :(得分:1)

您可以使用override注释

abstract class A {
    open val name: String = "Empty name"
}

class B(override val name: String) : A()

答案 2 :(得分:0)

您可以在nameabstract openoverride然后B。 e.g:

public abstract class A {
    open var name: String = "Empty name"
}
public class B(name: String) : A() {
    override var name: String = name
}

&#34>&​​#34;""构造函数但它可能满足您的需求。