为什么这个班级考虑最终?

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

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 

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

在Kotlin中,除Java和C#之外,所有的类都是默认的final,除非标记为明确open 。 以下是文档中的内容 :

一个类的open注释与Java的final一个是相反的:它允许其他人从这个类继承。 默认情况下,Kotlin中的所有类都是final的,这对应于Effective Java ,Item 17:设计和文档以进行继承或者禁止它。

解决的办法就是把你的班级标记为open class Dice

另外,请注意data类继承的限制 :它们既不能open也不能扩展其他类。