2017-03-04 55 views
1

我有抽象類A與一些領域初始化抽象類領域

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

,並要繼承它

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

是否有不創建一個初始化塊,做的方式一行初始化nameclass B(::name: String)

+0

沒有必要重寫,而僅僅是爲了初始化 – Serge

回答

1

不,對於未在父類primary constructor中聲明的屬性,沒有辦法做到這一點。

但你可以改變你的例子添加一個主構造:

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

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

它看起來很奇怪有用於在構造領域,沒有進入初始化現有的訪問 – Serge

0

您可以nameabstractopen,然後overrideB。例如:

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

它並不完全在構造函數中,但它可能會滿足您的需求。

1

您可以使用override註釋

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

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