[코틀린 문법] 클래스의 다형성
// Polymorphism(다형성) //
fun main() {
// Up-Casting(업캐스팅) //
// 상위 자료형인 수퍼 클래스로 변환
// 별도의 연산자 필요 없음
// Down-Casting(다운캐스팅) //
// 업캐스팅 된 인스턴스를 다시 하위 자료형으로 변환
// as is
var a = Drink()
a.drink()
// 음료를 마십니다
var b: Drink = Coke()
b.drink()
// 음료 중 콜라를 마십니다
// b.washDishes()
// Kotlin: Unresolved reference: washDishes
// -> 다운캐스팅 필요
// is //
// 변수가 자료형에 호환되는지를 먼저 체크한 후 변환해주는 캐스팅 연산자
// 조건문 내에서만 사용
if(b is Coke) {
b.washDishes()
}
// 콜라로 설거지를 합니다
// as //
// 변수를 호환되는 자료형으로 변환해주는 캐스팅 연산자
// 코드 내에서 사용시 즉시 자료형 변환 후 변환된 자료형 반환
var c = b as Coke
c.washDishes()
// 콜라로 설거지를 합니다
b.washDishes()
// 콜라로 설거지를 합니다
}
open class Drink {
var name = "음료"
open fun drink() {
println("${name}를 마십니다")
}
}
// Drink 상속받음
class Coke: Drink() {
var type = "콜라"
override fun drink() {
println("${name} 중 ${type}를 마십니다")
}
fun washDishes() {
println("${type}로 설거지를 합니다")
}
}
참고
반응형
'개발(Android) > kotlin syntax' 카테고리의 다른 글
[Kotlin syntax] Collections (1) Lists (0) | 2022.04.07 |
---|---|
[Kotlin syntax] Generic (0) | 2022.04.07 |
[Kotlin syntax] Observer Pattern, Anonymous Objects (0) | 2022.04.06 |
[Kotlin syntax] Objects (0) | 2022.04.06 |
[Kotlin syntax] Scope Functions (0) | 2022.04.05 |