在子构造函数中初始化抽象类字段
我有抽象类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
abstract
或open
,然后在B
override
它。 例如:
public abstract class A { open var name: String = "Empty name" } public class B(name: String) : A() { override var name: String = name }
它不完全是“在”构造函数,但它可能会满足您的需求。