2016-10-03 80 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也不能扩展另一个类。

相关问题