我试图继承以下类型,但编译器说它是最终的。
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
为什么我的类型是最终的,因为我不打算这样做?
答案 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
也不能扩展另一个类。