클래스 - 상속

황승현·2023년 12월 7일
0

코틀린 강의 정리

목록 보기
17/36
post-thumbnail

상속(Inheritance)

부모 클래스의 프로퍼티와 메서드를 자식 클래스가 재활용하는 것

  • 공통적인 요소가 있다면 부모/자식 클래스를 구분하여 상속 관계를 만들 수 있다.
  • 코틀린은 다른 언어들과 달리 생략된 final 키워드를 있기 때문에 기본적으로는 상속이 막혀있다.
    • 무분별한 상속으로 예상치 못한 흐름을 방지하기 위해서.
  • 다형성을 구현할 수 있다.
  • 클래스의 내용을 변경해야할 때 전부 바꿀 필요 없이 부모 클래스만 변경하면 된다.
  • open 키워드를 활용해서 상속 관계를 만들 수 있다.

부모 클래스에서 명시적 생산자 활용하지 않는 경우

  • 닭, 참새, 비둘기는 새라는 부모에서 출발했다는 관계를 만들어줄 수 있다.
fun main() {
    var bird = Bird() //클래스 객체 인스턴스화
    var chicken = Chicken() //클래스 객체 인스턴스화
    var sparrow = Sparrow() //클래스 객체 인슽턴스화
    var pigeon = Pigeon() //클래스 객체 인스턴스화

    bird.fly() //bird의 fly 메서드 호출
    chicken.fly() //bird의 fly 메서드 호출
    sparrow.fly() //bird의 fly 메서드 호출
    pigeon.fly() //bird의 fly 메서드 호출
}

open class Bird { //Chiken, Sparrow, Pigeon의 부모 클래스
    fun fly() {
        println("새는 날아요~")
    }
}

class Chicken : Bird() { //Bird 클래스 상속 받음

}

class Sparrow : Bird() { //Bird 클래스 상속 받음

}

class Pigeon : Bird() { //Bird 클래스 상속 받음

}

부모클래스(Bird)에서 생성자를 활용하는 경우

  • 자식에서 객체 생성시 전달해줘야 됨
fun main() {
    var bird = Bird("새") //클래스 객체 인스턴스화
    var chicken = Chicken("닭") //클래스 객체 인스턴스화
    var sparrow = Sparrow("참새") //클래스 객체 인스턴스화
    var pigeon = Pigeon("비둘기") //클래스 객체 인스턴스화

    bird.fly() //bird의 fly 메서드 호출
    chicken.fly() //bird의 fly 메서드 호출
    sparrow.fly() //bird의 fly 메서드 호출
    pigeon.fly() //bird의 fly 메서드 호출
}

open class Bird(name:String) {  //Chiken, Sparrow, Pigeon의 부모 클래스
    var name: String = ""

	// 주생성자를 이용해서 클래스 인스턴스화 하겠다.
    init { 
        // this는 현재 클래스의 프로퍼티를 의미합니다
        // var name: String = ""
        this.name = name
    }

    fun fly() {
        println("${name} 날아요~")
    }

}

// Chicken 클래스는 주생성자의 파라미터로 닭 받아옮
// 받아온 파라미터를 부모 클래스 Bird의 주생성자로 전달
class Chicken(name: String) : Bird(name) { //Bird 클래스 상속 받음

}

// Sparrow 클래스는 주생성자의 파라미터로 참새를 받아옮
// 받아온 파라미터를 부모 클래스 Bird의 주생성자로 전달
class Sparrow(name: String) : Bird(name) { //Bird 클래스 상속 받음

}

// Pigeon 클래스는 주생성자의 파라미터로 비둘기를 받아옮
// 받아온 파라미터를 부모 클래스 Bird의 주생성자로 전달
class Pigeon(name: String) : Bird(name) { //Bird 클래스 상속 받음

}

참고자료

https://kotlinlang.org/docs/inheritance.html

0개의 댓글