我有抽象類A與一些領域初始化抽象類領域
public abstract class A {
var name: String = "Empty name"
}
,並要繼承它
public class B(name: String) : A() {
init {
this.name = name
}
}
是否有不創建一個初始化塊,做的方式一行初始化name
像class B(::name: String)
?
我有抽象類A與一些領域初始化抽象類領域
public abstract class A {
var name: String = "Empty name"
}
,並要繼承它
public class B(name: String) : A() {
init {
this.name = name
}
}
是否有不創建一個初始化塊,做的方式一行初始化name
像class B(::name: String)
?
不,對於未在父類primary constructor中聲明的屬性,沒有辦法做到這一點。
但你可以改變你的例子添加一個主構造:
public abstract class A(var name: String = "Empty name")
public class B(name: String) : A(name)
它看起來很奇怪有用於在構造領域,沒有進入初始化現有的訪問 – Serge
您可以name
abstract
或open
,然後override
在B
。例如:
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()
沒有必要重寫,而僅僅是爲了初始化 – Serge