작성
·
12
0
태현님 안녕하세요, 간만에 강의를 듣던 중 해당 개념에 대해 제가 잘 이해하고 있는지에 대해 여쭤보고자 질문을 드립니다.
제가 헷갈리는 부분은 open
에 대한 것과 상속에 대한 주의점인데요.
package me.sungbin.lec10
open class Base(
open val number: Int = 100,
) {
init {
println("Base Class")
println(number)
}
}
package me.sungbin.lec10
class Derived(
override val number: Int,
) : Base() {
init {
println("Derived Class")
}
}
open 키워드는 기본적으로 상속을 받을 클래스에 붙여주며, abstract
과 같이 반드시 구현해야 하는 클래스에는 따로 명시적으로 붙여주지 않는 것으로 이해가 되었습니다.
예시의 Base
클래스와 Derived
클래스에서 getMember()
호출 시, 초기 값이 나온 부분은 실제 Derived
클래스에서 생성자를 호출하고 그 생성자가 상위 클래스 생성자를 호출하고 그 생성자에서 number를 출력하려고 하는데 해당 number는 오버라이딩 되었으니, 하위 클래스의 number를 출력해야 하나, 해당 하위 클래스 생성자 호출 전이므로 초기 값 0이 나온다?라고 이해하면 좋을까요?
제가 이해한게 잘 맞는지 혹은 잘못되게 생각한 부분이 있는지 확인해주시면 감사드리겠습니다! 🙂
실무에서 이런 케이스를 겪어본 적이 없어서 헷갈리는 것 같아서 이번 기회에 제대로 알아가보려구요!
답변