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

+ Recent posts