为什么这堂课被认为是最终的?

bar*_*own 3 inheritance kotlin

我试图继承以下类型,但编译器说它是最终的.

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
Run Code Online (Sandbox Code Playgroud)

为什么我的类型是最终的,因为我不打算这样做?

hot*_*key 7

在Kotlin中,与Java和C#不同,默认情况下所有类都是final,除非open明确标记.这是文档中的内容:

open类的注释与Java相反final:它允许其他人继承此类.默认情况下,Kotlin中的所有类都是final,对应于Effective Java,第17项:继承的设计和文档,或者禁止它.

解决方案就是将您的课程标记为open class Dice.

另外,请注意继承的限制data:它们既不能open也不能扩展另一个类.