References: Do it! 코틀린 프로그래밍
코틀린에서 상속을 알아봅니다.
1. 상속
선언한 클래스가 너무 추상적이라 명확한 한 개체를 정의하기에 모호할 경우에 하위에 새로운 클래스를 추가 해 좀 더 명확한 클래스로 만들 수 있습니다.
이럴 때 상속을 사용하게 되며 추상적인 클래스를 좀 더 명확화 시키기 위해 클래스를 상속받아 좀 더 구체적인 클래스를 만듭니다.
아래의 예시를 통해 이전에 만든 Bird 클래스를 이용해 파생 클래스를 만들어 보도록 하겠습니다.
open class Bird(var name: String, var wing: Int, var beak: String, var color: String){
fun fly() = println("Fly wing: $wing")
fun sing(vol: Int) = println("Sing vol: $vol")
}
class Lark(name: String, wing: Int, beak: String, color: String): Bird(name, wing, beak, color){
fun singHappy() = println("Happy song!")
}
class Parrot: Bird{
val language: String
constructor(name: String, wing: Int, beak: String, color: String, language: String): super(name, wing, beak, color){
this.language = language
}
fun speak() = println("Speak! : $language")
}
fun main() {
val coco = Bird("myBird", 2, "short", "blue")
val lark = Lark("myLark", 2, "long", "brown")
val parrot = Parrot("myParrot", 2, "short", "multiple", "Korean")
lark.singHappy()
parrot.speak()
lark.fly()
}
- 클래스를 상속할 수 있도록 open 키워드를 사용합니다.
- 상속받은 값을 사용할 것이므로 var키워드는 생략할 수 있습니다.
- :Bird(프로퍼티)로 Bird 클래스를 상속받습니다. 자식 클래스의 프로퍼티가 부모 클래스와 동일하면 추가적인 초기화 작업은 필요없습니다.
- :Bird로 Bird 클래스를 상속 받습니다. 프로퍼티를 별도로 명시하지 않았으므로 부 생성자를 통해 프로퍼티를 초기화 해줘야 합니다. language 프로퍼티가 추가되었으므로 부 생성자 내에서 초기화 시켜줍니다.
- 클래스내의 메서드를 실행시킵니다. lark의 부모 클래스인 Bird에 fly가 정의되어 있으므로 사용할 수 있습니다.
위의 코드를 실행한 결과는 다음과 같습니다.
반응형
'Programming' 카테고리의 다른 글
[Kotlin] 24. 클래스 혹은 객체간의 관계 (0) | 2019.08.27 |
---|---|
[Kotlin] 23. 다형성(Polymorphism) (0) | 2019.08.24 |
[Kotlin] 21. 생성자 (0) | 2019.08.24 |
[Kotlin] 20. 예외 처리 (0) | 2019.08.24 |
[Kotlin] 19. 라벨 (0) | 2019.08.23 |