테크과학! DiMo
개발 환경: play.kotlinlang.org
Up-Casting
상위 자료형인 수퍼클래스로 변환
Down-Casting
- Up-Casting된 인스턴스를 다시 하위 자료형으로 변환.
- Down-Casting은 '별도의 연산자'가 필요함.
as
변수를 호환되는 자료형으로 변환해주는 캐스팅 연산자. 반환도 가능함.
var a: Dring = Cola()
var b = a as Cola
is
변수가 자료형에 호환되는지를 먼저 체크한 후 변환해주는 캐스팅 연산자. 조건문 내에서 사용됨
var a: Dring = Cola()
if (a is Cola)
{
// 이 안에서만 a가 cola가 됨
}
fun main() {
var a = Drink()
a.drink()
var b:Drink = Cola()
b.drink()
// 다운 캐스팅을 해야 washDishes 호출 가능.
if (b is Cola)
{
// is는 조건문 내에서 잠시 다운 캐스팅이 가능.
b.washDishes()
}
// b.washDished() => Unresolved reference(참조할 수 없다는 에러)
var c = b as Cola
c.washDishes()
b.washDishes() // as를 사용하면 반환값 뿐만 아니라 변수 자체도 Down-Casting이 되어 오류x
}
//Drink 클래스를 상속이 가능한 open class로 만들어 줌.
open class Drink {
var name = "음료"
// override가 가능하도록 open 해줌
open fun drink() {
println("${name} 을/를 마십니다")
}
}
class Cola: Drink() {
var type = "콜라"
override fun drink() {
println("${name} 중에 ${type} 을/를 마십니다")
}
fun washDishes () {
println("${type}로 설거지를 합니다")
}
}
Output:
음료 을/를 마십니다
음료 중에 콜라 을/를 마십니다
콜라로 설거지를 합니다
콜라로 설거지를 합니다
'Kotlin > 기본 문법' 카테고리의 다른 글
코틀린 강좌 #19 리스트 (0) | 2020.12.20 |
---|---|
코틀린 강좌 #18 제너릭 (0) | 2020.12.19 |
코틀린 강좌 #16 익명객체와 옵저버 패턴 (0) | 2020.12.19 |
코틀린 강좌 #15 오브젝트 (0) | 2020.12.19 |
코틀린 강좌 #14 스코프 함수 (0) | 2020.12.19 |