[18강] https://youtu.be/dgcLsnJodu8
1. 다형성
객체의 생성문법을 아래와 같이 볼 때 :
var a : A = A()
생성요청 생성핸들 : 그릇 = 실제크기
실제크기를 많이 만들어서, 그릇에 담을 수 있을 만큼만 담는 것은 문제가 안되는데,
쥐꼬리 만큼 만들어서, 기대한 그릇에 담다가 마는 행위는 용납할 수 없습니다.
아래 예시에서 마지막 구문은 에러가 나기 때문에 주석처리 하였습니다.
fun main() {
var a = A(1)
a.whoAmI()
var b = B(2)
b.whoAmI()
var c : A = B(3)
c.whoAmI()
// var d : B = A(4) // Error
// d.whoAmI()
}
open class A(var value : Int) {
fun whoAmI(){
var str = when(this){
is B -> "B"
is A -> "A"
else -> "X"
}
println("$str : $value")
}
}
class B(value : Int) : A(value) {
}
A : 1
B : 2
B : 3
2. Downcasting (is와 as)
단, 컴파일러의 판단 기준은 해당객체의 실제 사이즈보다 명시적으로 선언된 타입에 관계가 있으므로,
선언된 타입안에서 함수(메서드)를 사용 할 수 있고,
is 구문 안에서는 일시적으로 사용 가능
as 구문 이후에는 영구적으로 사용이 가능합니다.
fun main() {
var c : A = B()
c.original() // 1
// c.premium() // 에러 발생
if(c is B) {
c.premium() //2
}
var d = c as B
c.premium() // 3
d.premium() // 4
}
open class A() {
fun original() { println("일반 기능") }
}
class B() : A() {
fun premium() { println("확장 기능") }
}
일반 기능
확장 기능
확장 기능
확장 기능
'코틀린' 카테고리의 다른 글
[Youtube DiMo] 20강. 리스트 (0) | 2022.04.29 |
---|---|
[Youtube DiMo] 19강. 제네릭 (0) | 2022.04.29 |
[Youtube DiMo] 17강. 익명객체와 옵저버 패턴 (0) | 2022.04.29 |
[Youtube DiMo] 16강. Object (0) | 2022.04.29 |
[Youtube DiMo] 14-15강. 고차함수(함수포인터)와 람다함수/스코프함수 (0) | 2022.04.29 |
댓글