본문 바로가기
언어/Kotlin

코틀린 캐스팅

by 김어찐 2022. 5. 25.
728x90
package casting

fun main() {
    val obj1:SubClass1 = SubClass1()
    val obj2:SubClass2 = SubClass2()

    // 부모에 담는다
    // 스마트 캐스팅 발생
    val super1:SuperClass1 = obj1;

    // 스카트 캐스팅 발생
    val inter1:Inter1 = obj2

    //자식 클래스로 변경하는 경우 as 사용
    // as : 지정된 클래스 타입으로 강제 변환하는 연산자(연관된 클래스만!!)
    super1 as SubClass1
    inter1 as SubClass2

    super1.subMethod1()
    inter1.subMethod2()


    //--------------------------------------

    //일반적으로 is 사용하면 true false값 반환환
   val obj3 = SubClass1()
    val chk1 = obj3 is SubClass1
    println("chk1 = ${chk1}")

    val super3:SuperClass1 = obj3
    val chk3 = super3 is SuperClass1
    println("chk3 = ${chk3}")

    // if 문으로 is 사용하면 if문안에서는 형 변한 발생!!
    // if 밖으로 나가면 형 변환 해제
    if(super3 is SubClass1)
    {
        super3.subMethod1()
    }

    var obj10:SubClass1 = SubClass1()
    var obj11:SubClass2 = SubClass2()

    anyMethod(obj10)
    anyMethod(obj11)

    val num1:Int = 100;
    val num2:Long = num1.toLong()
    println("num2 = ${num2}")

    var str1:String = "100"
    var num3:Int = str1.toInt()
    println("num3 = ${num3}")
}

fun anyMethod(obj: Any) {
    if (obj is SubClass1) {
        obj.subMethod1()
        println("obj.javaClass = ${obj.javaClass}")
    }
    else if (obj is SubClass2) {
        obj.subMethod2()
        println("obj.javaClass = ${obj.javaClass}")
    }
}

open class SuperClass1

interface Inter1

class SubClass1 : SuperClass1()
{
    fun subMethod1(){
        println("SubClass1의 subMethod1입니다.")
    }
}
class SubClass2 : Inter1{
    fun subMethod2(){
        println("SubClass2의 subMethod2입니다.")
    }
}
728x90

'언어 > Kotlin' 카테고리의 다른 글

코틀린 연산자 오버로딩  (0) 2022.05.25
코틀린 열거형  (0) 2022.05.25
코틀린 null 처리  (0) 2022.05.25
코틀린 익명 중첩 클래스  (0) 2022.05.25
코틀린 Generic  (0) 2022.05.25