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 |