2016-10-03 92 views
3

我想繼承以下類型,但編譯器說它是最終的。爲什麼這個班級被認爲是最終的?

class Dice(private var side : Int) 
{ 
    constructor(D : DiceTypesK) : this(D.value) {} 
} 

class ExplodedDice(private val D : DiceTypesK) : Dice(D) 
               // ^^^^ this class is final and 
               //  can not be inherited from 

爲什麼我的類型是最終的,因爲我不打算這樣做?

回答

7

在Kotlin中,除Java和C#之外,所有類都默認是最終的,除非明確標記爲open。下面是在the docs

open註釋一類是Java的final相反:它允許別人從這個類繼承。默認情況下,Kotlin中的所有類都是最終的,這對應於Effective Java,第17項:用於繼承的設計和文檔,或者禁止它。

解決方案只是將您的班級標記爲open class Dice

此外,請注意limitations on data classes繼承:它們既不能是open也不能擴展另一個類。