Inheritance 初始化子'中的抽象类字段;s构造函数

Inheritance 初始化子'中的抽象类字段;s构造函数,inheritance,kotlin,Inheritance,Kotlin,我有一个抽象类A和一些字段 public abstract class A { var name: String = "Empty name" } 想继承它吗 public class B(name: String) : A() { init { this.name = name } } 是否有一种方法可以不创建init块,而像类B(::name:String)那样执行名称的一行init?否,对于未在父类中声明的属性,没有方法这样做 但您可以通过添加主

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

public abstract class A {
    var name: String = "Empty name"
}
想继承它吗

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

是否有一种方法可以不创建init块,而像
类B(::name:String)
那样执行
名称的一行init?

否,对于未在父类中声明的属性,没有方法这样做

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

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

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

您可以使
name
abstract
打开
,然后在
B
中覆盖它。e、 g:

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

它并不完全“在”构造函数中,但它可能满足您的需要。

您可以使用
override
注释

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

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

在构造函数中有创建字段的权限,却没有对init existing的访问权限,这看起来很奇怪。不需要重写,只需要对init进行访问