좌충우돌 코딩

코틀린 - 상속 본문

코틀린/순수 코틀린

코틀린 - 상속

Tracoding 2023. 3. 26. 23:11

코틀린 공부를 하면서 들었던 말 중에 특이한 말이 있습니다.

- "여러분들~~~ 코틀린에서의 클래스는 기본적으로 상속이 금지되어있습니다!!!"

- "네에????"

 

네 그렇습니다. 독립심을 팍팍 키워주는 스파르타식 코틀린입니다.

나의 재산을 자녀에게 넘겨주지 않고 사회에 환원하겠다!!

 

기본적으로 안 되는 것이지.. 상속을 못 받지는 않습니다.

접근제한자 키워드에서도 protected가 있잖아요?!

 

상속을 받기 위해서는 부모클래스 앞에 open이라는 키워드를 사용해야지만 상속을 받을 수 있습니다.

사회로 치면 변호사에게 상속하겠다는 공증 느낌이랄까요??

 

코드를 봅시다~

open class Parent {
	// 코드
}

class Child: Parent() {
	// 코드
}

상속할 클래스는 클래스 앞에  open 키워드를 사용하고 상속 받는 클래스는 클래스 이름 뒤에 콜론(:)뒤에 상속할 클래스를

적어주면 상속을 받게 됩니다.

 

만일 상속받을 클래스에 생성자가 있다면 파라미터를 넘겨줄 수 있습니다.

open class Parent(age: Int) {
	// 코드
}

class Child(name: String, age: Int): Parent(age) {
	// 코드
}

자식클래스에 파라미터 age를 부모클래스에 전달해주는 개념입니다.

 

open class Parent {
    var hello:String = "안녕하세요"
    fun sayHello() {
        println("${hello}!! 여긴 Parent 클래스입니다.")
    }
}

class Child: Parent() {

}

fun main() {
    val child = Child()
    child.sayHello()   // 안녕하세요!! 여긴 Parent 클래스입니다. 출력됨
}

자식클래스는 아무것도 없는데, 자식클래스에서 존재하지 않는 sayHello를 호출했고

콘솔을 보니 "안녕하세요!! 여긴 Parent 클래스입니다."가 출력되는 것을 확인할 수 있습니다.

부모클래스에서 상속을 받았기 때문에 가능한 일이죠.

 

상속하면 빠질 수 없는 오버라이딩를 확인해볼까요?

open class Parent {
    open var age: Int = 30
    open fun people() {
        println("나는 부모 클래스, 나이는 $age")
    }
}

class Child: Parent() {
    override var age: Int = 20
    override fun people() {
        rintln("나는 자식 클래스, 나이는 $age")
    }
}

fun main() {
    val child = Child()
    child.people()    // 나는 자식 클래스, 나이는 20 출력됨
}

오버라이딩을 하기 위해서는 상속과 동일하게 open키워드를 사용해야합니다.

부모클래스에 함수 앞에 open 키워드가 사용된 것이 보이죠?

 

super라는 키워드로 부모클래스에 변수 및 함수를 호출할 수 있습니다.

부모클래스에서 나이는 30인데 자식클래스에서 age를 변경했고 결과를 보면 잘 수정이 되었습니다.

 

 

 

그럼 이만~~

'코틀린 > 순수 코틀린' 카테고리의 다른 글

코틀린 - 널(null)  (0) 2023.03.29
코틀린 - 다양한 클래스  (0) 2023.03.27
코틀린 - 접근제한자  (0) 2023.03.25
코틀린 - 클래스(class)  (0) 2023.03.24
코틀린 - 함수(funcation)  (0) 2023.03.23
Comments