2016-10-03 2 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에서는 명시 적으로 open으로 표시되지 않는 한 Java 및 C#과 달리 모든 클래스는 기본적으로 최종 클래스입니다. 여기 the docs에서의 내용은 다음과 같습니다

클래스에 open 어노테이션은 자바의 final의 반대이다 : 그것은 다른 사람이 클래스에서 상속 할 수 있습니다. 기본적으로 Kotlin의 모든 클래스는 최종이며 Effective Java, Item 17 : 상속을위한 디자인 및 문서 또는 그렇지 않으면 금지됩니다.

해결책은 단지 클래스를 open class Dice으로 표시하는 것입니다.

또한 limitations on data classes의 상속에 유의하십시오. open 일 수도 있고 다른 클래스를 확장 할 수도 없습니다.

관련 문제