Extension function with Inheritance 를 통해서 알아야할 것 : 상속에 대해서 확장함수와 멤버함수의 특징이 서로 다르다. 참조변수가 가르치는 객체타입을 따를것인가. 참조 변수 타입을 그대로 따를것인가가 다르다.

확장함수의 상속관계 : 참조변수 타입 그대로를 사용
멤버함수의 상속관계 : 참조변수가 가르치는 객채를 사용

open class one
class two: one()
{
    fun twoTest() = println("two test Function")
}

fun one.helloWorld() = println("one")
fun two.helloWorld() = println("two")

fun main (args: Array<String>) {
    val checkInheritedStep : one = two()
    checkInheritedStep.helloWorld()
}

one

one 클래스와 two 클래스는 상속관계이고, main 함수에서 타입은 one 인 변수에 two 객체를 가르치는 변수를 선언하였다. 맴버 함수를 캐스팅한것과 같은 모습이지만, 확장함수는 멤버함수랑은 다르게 참조변수의타입 그대로를 따른다. 그래서 결과는 one 클래스에 주입된 확장함수의 실행값이 나타나는것.

0