본문으로 바로가기

[Kotlin] Extensions(상속) - class, fun

category Android 2020. 3. 30. 11:34

Class 상속


  • 상속은 콜론( : )으로 받는다.
  • class의 생성자가 있으면 호출하는 표현식을 반드시 써야한다.
  • final로 정의된 class는 다른 클래스에서 상속을 받을 수 없다.(java, kotlin 공통사항)
  • Kotlin에서는 class default 값은 final 이다.
    따라서, 상속을 받기 위해서는 open이라는 예약어를 부모 class 선언해 주어야한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
open class Phone{
    fun call(){
        println("전화를 걸어요")
    }
}
 
class HandPhone : Phone(){ //생성자가 있으면 호출하는 표현식을 써야한다.
    fun mobileCall(){
        println("이동 중에 전화가 왔어요")
    }
 
   fun takePictur(){
        println("30만 화소의 사진을 찍어요")
    }
}
 
cs

1행 : Kotlin에서는 class default 값은 final 이다.
따라서, 상속을 받기 위해서는 open이라는 예약어를 부모 class 선언해 주어야한다.

7행 : class의 생성자가 있으면 호출하는 표현식을 반드시 써야한다.

 

-결과-

1
2
3
4
5
6
7
8
9
10
11
12
13
fun main(){
    var p1=Phone()
    var p2=HandPhone()
 
    println("----Phone-----")
    p1.call() //전화를 걸어요
 
    println("----HandPhone-----")
    p2.call() //전화를 걸어요
    p2.mobileCall() //이동 중에 전화가 왔어요
    p2.takePictur() //30만 화소의 사진을 찍어요
 
}
cs

 

 

 

fun(함수) 상속


함수도 default 값으 final 이다.

따라서 override를 하기 위해서는 open 이라는 예약어가 필요하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
open class HandPhone : Phone(){
    fun mobileCall(){
        println("이동 중에 전화가 왔어요")
    }
 
    //함수도 default 는 final 이다.
    //override가 가능하려면 open 이라는 예약어가 필요하다
    open fun takePictur(){
        println("30만 화소의 사진을 찍어요")
    }
}
 
class SmartPhone : HandPhone(){
    fun doInternet(){
        println("인터넷을 해요")
    }
 
    //open된 함수를 override 할 수 있다.
    override fun takePictur() {
        //부모 메소드 call
        //super.takePictur()
        println("1000만 화소의 사진을 찍어요")
    }
}
 
cs

 

-결과-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fun main(){
    var p2=HandPhone()
    var p3=SmartPhone()
 
    println("----HandPhone-----")
    p2.call() //전화를 걸어요
    p2.mobileCall() //이동 중에 전화가 왔어요
    p2.takePictur() //30만 화소의 사진을 찍어요
 
    println("----SmartPhone-----")
    p3.call() //전화를 걸어요
    p3.mobileCall() //이동 중에 전화가 왔어요
    p3.doInternet() //인터넷을 해요
    p3.takePictur() //1000만 화소의 사진을 찍어요
}
cs