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 |