이 코드를 보면,
Father, Mother은 Parent를 상속하고, Child는 인터페이스 두개를 구현(implement)한다.
그렇다면 Child에서 말하는 super은 Mother interface여야 하는가, Father interface여야 하는가. 이것이 다이아몬드 문제이다.
잘 보면 super 키워드에 컴파일 오류가 나있다. 즉, 해결법은 super 키워드를 호출할때 어떤 인터페이스를 호출할건지 지정해주면 된다.
package diamondQuestion
interface Parent{
fun follow() : Unit
}
interface Mother : Parent {
override fun follow() = println("Mother follow")
}
interface Father : Parent {
override fun follow() = println("Father follow")
}
class Child : Mother, Father {
override fun follow() {
println("child")
super<Mother>.follow()
}
}
fun Main() {
Child().follow()
}
반응형
'Android > 안드로이드 스터디(Kotlin)' 카테고리의 다른 글
Kotlin] 30. 데이터 클래스 (0) | 2020.12.10 |
---|---|
Kotlin] 29. 중첩 클래스 (0) | 2020.12.10 |
Kotlin] 27. lateinit (0) | 2020.12.10 |
Kotlin] 26. const (0) | 2020.12.10 |
Kotlin] 25. inline 함수 (0) | 2020.12.10 |