본문 바로가기

코틀린/개념

[kotlin/코틀린] 상속

목차

1. class 특징

2. primary/secondary constructor

3. 오버라이딩

4. 초기화 순서

5. super 키워드

 

 

1. class 특징

- 모든 클래스는 슈퍼 클래스로 Any 클래스를 가진다.

     Any 클래스는 3개의 메소드가 있다. equals(), hashCode(), toString()

- 모든 클래스는 final로 선언되어 있다. 그래서 상속시에 open 키워드를 사용해야 한다.

 

open class Shape() {}
class Circle : Shape(){}

 

 

2. primary/secondary constructor

primary constructor

 

class Circle(_param : String){}
class Circle2 constructor (_param: String){}

 

클래스 정의와 동시에 생성자를 정의하는 경우를 말한다

 

secondary constructor

 

class Circle{
    constructor(_param : String)
    constructor(_param : String, _param2: String)
}

 

class {  이후에 나오는 모든 생성자들을 말한다

 

 

3. 오버라이딩

메소드 , 멤버 변수 : 오버라이딩시 open 키워드 필요, 없을 시 오버라이딩 불가

멤버 변수 val : getter

멤버 변수 var : getter / setter

 

open class Parent{
    open var open = 1
    var noOpen = 2
    open fun openMethod(){}
    fun noOpenMethod(){}
}
class Child : Parent(){
    override var open: Int
        get() = super.open
        set(value) {}

    override fun openMethod() {
        super.openMethod()
    }
}

 

 

4. 초기화 순서

 

open class Parent(_text : String){
    init {
        Log.e("parent","init")
    }
    open var text = _text.also {
        Log.e("parent","property init")
    }
}
class Child(_text : String) : Parent(_text.also { Log.e("parent","constructor") }){
    init {
        Log.e("child","init")
    }
    override var text: String = super.text.also { Log.e("child","override_property") }
}

 

자식 생성자 -> 부모 생성자 -> 부모 init -> 부모 초기화 -> 자식 init -> 자식 초기화

 

 

5.  super 키워드

부모를 지칭하는 키워드, 부모의 메소드, 속성값들을 호출 할 수 있다.

 

open class Parent{
    open fun parentMethod(){
        Log.e("Parent","method")
    }
}
class Child : Parent(){
    override fun parentMethod() {
        super.parentMethod()
    }
}

 

'코틀린 > 개념' 카테고리의 다른 글

[kotlin/코틀린] 코루틴 (Coroutine)  (0) 2021.07.12