Int는 Any를 상속한다.
그럼, AAA<Int>는 AAA<Any>를 상속할까? 아니다. 이 Int는 Any를 상속하지만, 이것이 제네릭이 되는 순간 이 둘은 별개의 값이 된다.
이것을 어떻게 상속할 수 있을까? 이것을 해결해줄 키워드가 in/out이다.
package inOutEx
class AAA <out T>
class BBB <in T>
fun main() {
val aaaSub = AAA<Int>()
val aaaSuper : AAA<Any> = aaaSub
val bbbSub = BBB<Any>()
val bbbSuper : BBB<Int> = bbbSub
val star : AAA<*> = aaaSub
}
out 키워드는 슈퍼 클래스에 서브 클래스를 대입할 수 있게 해주고,
in 키워드는 서브 클래스에 슈퍼 클래스를 대입할 수 있게 해준다.
반응형
'Android > 안드로이드 스터디(Kotlin)' 카테고리의 다른 글
Kotlin] 36. 반복자 (0) | 2020.12.11 |
---|---|
Kotlin] 35. .. 연산자 (0) | 2020.12.11 |
Kotlin] 33. 타입 매개변수 비교하기(reified) (0) | 2020.12.11 |
Kotlin] 32. 함수 참조(Function Reference) (0) | 2020.12.10 |
Kotlin] 31. 함수 리터럴 (0) | 2020.12.10 |