티스토리 뷰

상속이 필요한 경우

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

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

 

속성과 함수를 물려주는 쪽을 SuperClass, 물려받는 쪽을 SubClass

 

Animal 클래스를 Dog와 Cat 클래스로 확장하기

class Animal (var name: String, var age: Int, var type: String) {
    fun introduce() {
        println("저는 ${type} ${name}이고, ${age}살 입니다.")
    }
}

현재 Animal 클래스는 'open' 상태가 아니기 때문에 상속받을 수 없음

* open : 클래스가 상속받을 수 있도록 클래스 선언시 붙여줄 수 있는 키워드

 

Animal Class에 open 키워드를 붙여주고 이를 상속받는 클래스를 만든다.

open class Animal (var name: String, var age: Int, var type: String) {
    fun introduce() {
        println("저는 ${type} ${name}이고, ${age}살 입니다.")
    }
}

class Dog (name: String, age: Int) : Animal (name, age, "개") {
    fun bark() {
        println("멍멍")
    }
}

class Cat (name: String, age: Int) : Animal (name, age, "고양이") {
    fun meow() {
        println("야옹야옹")
    }
}

상속에 대한 규칙

1. SubClass는 SuperClass에 존재하는 속성과 '같은 이름'의 속성을 가질 수 없음

2. SubClss가 생성될 때는 반드시 SuperClass의 생성자까지 호출되어야 함

 

fun main() {
	var a = Animal("별이", 5, "개")
    var a = Animal("별이", 5)
    a.introduce()
    b.introduce()
    // 저는 개 별이이고, 5살 입니다.
    // 저는 개 별이이고, 5살 입니다.

    b.bark()
    // 멍멍
    
    var c = Cat("루이", 1)
    c.introduce()
    c.meow()
    //저는 고양이 루이이고, 1살 입니다.
    //야옹야옹
}

클래스의 상속은 클래스를 더 구조적으로 다룰 수 있다는 장점이 있지만, 지나친 상속구조는 코드를 더 어렵게 만들 수 있음

 

출처 : 디모의 Kotlin 강좌를 통해 학습한 내용을 정리했습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함