Kotlin 강좌 18 - 클래스의 다형성

dyeon-dev·2023년 10월 15일
0

Kotlin

목록 보기
12/17
post-thumbnail

다형성

다형성은 클래스의 상속관계에서 오는 인스턴스의 호환성을 적극 활용할 수 있는 기능으로 수퍼클래스가 같은 인스턴스를 한번에 관리하거나 인터페이스를 구현하여 사용하는 코드에서도 이용된다.

Up-Casting

상위 자료형인 수퍼클래스로 변환한다
var a: Drink=Cola()

Down-Casting

Up-Casting을 다시 하위 자료형으로 변환한다.
별도의 연산자(캐스팅 연산자) 필요

  • as
  • is - 변수가 자료형에 호환되는지를 먼저 체크한 후 변환해주는 캐스팅 연산자, 조건문 내에서만 사용되는 특징
fun main() {
	// 업 캐스팅
    var a = Drink()
    a.drink()
    // 업 캐스팅
    var b:Drink = Cola()
    b.drink()
    
    // 다운캐스팅
    if(b is Cola)
    {
        b.washDishes()
    }
    // 다운캐스팅
    var c = b as Cola
    c.washDishes()
    b.washDishes() // as를 사용하면 반환값 뿐만 아니라 변수 자체도 다운캐스팅 되기 때문에 에러가 나지 않음
}

open class Drink {
    var name = "음료"
    
    open fun drink() {
        println("${name}을 마십니다")
    }
}

class Cola: Drink() {
    var type = "콜라"
    
    override fun drink() {
        println("${name}중에 ${type}을 마십니다.")
    }
    fun washDishes() {
        println("${type}로 설거지를 합니다")
    }
}

음료을 마십니다
음료중에 콜라을 마십니다.
콜라로 설거지를 합니다
콜라로 설거지를 합니다

0개의 댓글