NeuroWhAI의 잡블로그

[Kotlin] 상속 본문

개발 및 공부/언어

[Kotlin] 상속

NeuroWhAI 2018. 9. 15. 18:34


// 추상 클래스
abstract class ZeroBase {
    abstract fun hello() // Body 없음.
}

// 상속 가능 클래스
open class Base(val x: Int) : ZeroBase() {
    override fun hello() {
        // 오버라이드시 override 키워드 필수.
        println("Hello!")
    }
    
    // abstract class, interface의 요소가 아니라면
    // 오버라이드가 가능하기 위해선 open 키워드가 필요.
    open fun test() {
        println("Base")
    }
}

class Derived : Base {
    // super(...)로 상위 클래스의 생성자 호출 가능.
    constructor() : super(42)
    constructor(v: Int) : super(v)
    
    override fun test() {
        println("Derived")
    }
    
    fun test2() {
        // 상위 클래스의 요소에 접근하려면 아래 문법으로 가능.
        // C++로 따지면 Base::test()
        super<Base>.test()
    }
}

class Derived2(v: Int) : Base(v) {
    constructor() : this(42)
}

// 기본적으로 클래스는 final이라서 상속 불가.
// class Foo() : Derived()

fun main(args: Array<String>) {
    val a = Derived()
    a.hello()
    a.test()
    a.test2()
    println(a.x)
    
    val b = Derived(777)
    println(b.x)
    
    val c = Derived2()
    c.test()
    println(c.x)
    
    val d = Derived2(777)
    println(d.x)
}
Hello!
Derived
Base
42
777
Base
42
777

그러합니다.

특이한건 open 말곤 없네요.



Comments