[코틀린기초] 22. 상속과 클래스 계층

상속

자식 클래스를 만들 때 상위 클래스의 속성과 기능을 물려 받는 것

## open

코틀린의 모든 클래스는 묵시적으로 Any로부터 상속된다.

상속 가능한 클래스는 open 키워드로 선언하며, 상속은 : 기호로 명시한다.

주 생성자와 달리 부 생성자에서는 프로퍼티 선언이 불가능하다.

또한 서브 클래스의 생성자로 부모 클래스의 생성자를 호출하여 프로퍼티를 초기화하도록 한다.

  open class 기반 클래스명{
    ...
  }
  
  //상속할 때에는 기반 클래스의 생성자를 사용해야함
  //open이 없기 때문에 이런 클래스를 최종 클래스라고 한다. 더는 상속될 수 없는 클래스!
  class 파생 클래스명 : 기반 클래스 명(){ 
  
  }
  

## 예제 코드

  open class Bird(var name: String, var wing: Int, var beak: String){
    
    fun fly(){
      println("Fly")
    }
  }
  
  class Lark(name: String, wing: Int, beak: String) : Bird(name, wing, beak){ //자식 생성자로 프로퍼티 초기화
  
    fun singHitone(){
      println("sing Hitone")
    } 
  }
  
  class Parrot : Bird{
    var language : String
    constructor(name: String, wing: Int, beak: String, language: String) : super(name, wing, beak){ // 부생성자에서는 프로퍼티 선언 불가! 
      this.language = language
    }
    
    fun speak(){
      println("Speak $language")
    }
  }