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

时间:2016-10-03 16:08:26

标签: 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

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

1 个答案:

答案 0 :(得分:7)

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

  

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

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

另外,请注意limitations on data classes继承:它们既不能是open也不能扩展另一个类。