본문 바로가기

Language/Kotlin

[Kotlin] 클래스의 상속

728x90
반응형

상속이 필요한 이유

1. 이미 존재하는 클래스를 확장하여 새로운 속성이나 함수를 추가한 클래스를 만들어야 할 때

 

2. 여러 개의 클래스를 만들었는데 클래스들의 공통점을 뽑아 코드 관리를 편하게 할 때

 

 

  • 수퍼 클래스: 속성과 함수를 물려줌
  • 서브 클래스: 속성과 함수를 물려받음

 

 

open: 클래스가 상속될 수 있도록 클래스 선언 시 붙여주는 키워드 (코틀린은 상속 금지가 기본값)

상속의 규칙

  • 서브 클래스는 수퍼 클래스에 존재하는 속성과 같은 이름의 속성을 가질 수 없다. → 클래스의 자체 속성으로 만들어주는 var을 붙이지 말고 일반 파라미터로 받아 수퍼 클래스의 생성자에 직접 넘겨준다.
  • 서브 클래스가 생성될 때는 반드시 수퍼클래스의 생성자까지 호출되어야 한다.
fun main(){
    var a = Animal("별이", 5, "개")
    var b = Dog("별이", 5)

    a.introduce()  // 저는 개 별이이고, 5살 입니다.
    b.introduce()  // 저는 개 별이이고, 5살 입니다.

    b.bark()  // 멍멍

    var c = Cat("루이", 1)

    c.introduce()  // 저는 고양이 루이이고, 1살 입니다.
    c.meow()  // 야옹야옹
}

open class Animal(var name:String, var age:Int, var type:String){  // 수퍼 클래스
    fun introduce(){
        println("저는 ${type} ${name}이고, ${age}살 입니다.")
        // * 클래스 자신의 속성임이 확실할 때는 this를 사용하지 않아도 된다.
    }
}

class Dog(name:String, age:Int): Animal(name, age, "개"){  // 서브 클래스
    // 추가 함수
    fun bark(){
        println("멍멍")
    }
}

class Cat(name:String, age:Int): Animal(name, age, "고양이"){  // 서브 클래스
    // 추가 함수
    fun meow(){
        println("야옹야옹")
    }
}
728x90
반응형