개발(Android)/kotlin syntax

[Kotlin syntax] Polymorphism

shinyelee 2022. 4. 6. 22:46

[코틀린 문법] 클래스의 다형성

// 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