파게로그

[OOP] inheritance 본문

콤퓨타 왕기초/Kotlin

[OOP] inheritance

파게 2021. 6. 12. 12:11

Inheritance(상속)은 OOP의 핵심적인 기능 중 하나로서, 사용자가 기존에 존재하는 base class로부터 새로운 derived class를 생성할 수 있도록 한다. derived class는 base class로부터 모든 자질을 이어받으며, 자체적인 추가 자질을 가질 수 있다. inheritance를 이용하고자 한다면, derived class가 is a 관계가 맞는지 잘 확인해야만 한다.

 

기본적으로 Kotlin에서 클래스는 final이기에, open 키워드를 붙여서 이를 통해 derived class를 생성할 수 있도록 해야 한다.

 

open class Person(var name: String, var age: Int) {
    init {
        println("Person init: Created with values $name, $age.")
    }

    open fun introduce() {
        println("My name is $name.")
        println("I am $age years old.")
    }
}

class Teacher(name:String, age: Int, var subject: String): Person(name, age) {
    init {
        println("Teacher init: Created with values $name, $age, $subject.")
    }

    fun teach() {
        println("$name is teaching $subject...")
    }
}

class Student(name:String, age: Int, var goal: Char): Person(name, age) {
    init {
        println("Student init: Created with values $name, $age, $goal.")
    }

    fun study() {
        println("$name is studying for $goal...")
    }
}

fun main(args: Array<String>) {
    var person = Student("Ella", 12, 'A')
    person.introduce()
    person.study()
}

 

실행결과는 다음과 같다.

Person init: Created with values Ella, 12.
Student init: Created with values Ella, 12, A.
My name is Ella.
I am 12 years old.
Ella is studying for A...

 

Student 클래스의 객체가 생성되면, 일단 파라미터가 primary constructor에 전달된다. Kotlin에서는 객체가 생성되면 가장 먼저 init 블록을 찾는다. derived class의 init 블록이 먼저 실행되고 그 다음 base class의 init 블록이 실행된다.

 

'콤퓨타 왕기초 > Kotlin' 카테고리의 다른 글

[OOP] Abstract class, Interface  (0) 2021.06.12
[OOP] Visibility Modifiers  (0) 2021.06.12
[OOP] Getters and Setters  (0) 2021.06.11
[OOP] Constructors  (0) 2021.06.10
[OOP] OOP, Class and Objects  (0) 2021.06.10
Comments