Kotlin

[Kotlin] Extends

hvoon 2022. 9. 14. 15:32
fun main(){
    val s1= SubClass1() // 자식 클래스의 객체 생성
    println("s1.subMember1: ${s1.subMember1}")
    s1.subMember1()
    println("s1.superMember1: ${s1.superMember1}")
    s1.superMethod1()
}

// 상속이 될 클래스들이 final로 만들어짐. 이는 상속 불가능하므로 open 키워드를 옆에 붙임
open class SuperClass1{
    var superMember1 = 100
    fun superMethod1(){
        println("method of SuperClass1")
    }
}

// 상속은 extends 키워드 없이 부모 클래스 이름을 ':', '()'와 함께 클래스 옆에 써줌
class SubClass1 : SuperClass1(){
    val subMember1 = 200
    fun subMember1(){
        println("method of SubClass1")
    }
}
 
 
 
대표생성자가 있을 경우
// 부모 클래스에 대표생성자가 있다면
open class SuperClass11(val a1:Int){}

// 상속을 위해 부모클래스 이름을 쓰고 괄호를 연결했다면
// 괄호 안에 부모클래스의 대표생성자 매개변수에 맞게 전달인수를 전달해줌
// 그렇지 않으면 부모클래스의 멤버변수가 생성되지 않고 상속도 안 되는 에러를 발생함
class SubClass11: SuperClass11(100){}

// 자식클래스의 생성자가 따로 기술되어야 한다면 아래와 같이 표현
// 자신의 대표생성자는 없지만 부모클래스의 대표생성자가 있으므로
// 아래와 같이 super 키워드를 사용함
class SubClass12: SuperClass11{
    constructor(): super(100){}
}

// 자식클래스에도 대표생성자가 있다면 아래와 같이 작성
// 또한 constructor 키워드 생략 가능
// class SubClass4 constructor(var a4:Int): SuperClass2(100){
class SubClass13(var a4:Int): SuperClass11(100){
    constructor(): this(100){}
}