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

我有抽象类A与一些领域

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

并想继承它

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

有没有办法不创建一个初始化块,并做类似class B(::name: String) name的单行初始化?

不,对于没有在父类主构造函数中声明的属性,没有办法做到这一点。

但是你可以改变你的例子添加一个主要的构造函数:

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

您可以使用override注释

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

您可以将name abstractopen ,然后在B override它。 例如:

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

它不完全是“在”构造函数,但它可能会满足您的需求。