게시글
질문&답변
2023.02.01
상위클래스의 생성자나 init블럭에서 final이 아닌 프로퍼티에 접근하지 말라 의미여
number 를 계속 필드라고 생각해서 혼동됐는데Base 클래스의 init 구문에서 사용되는 number 는 getter 라고 생각하니까 이해가 됐습니다..!(혹시 저 처럼 헷갈리시는 분들을 위해) open class Base( open val num: Int = 100 ) { init { println("Base init") println(this.num) // Derived.getNum() } } class Derived( num: Int ) : Base(num) { override val num: Int = num get() { println("Derived getter") return field } init { println("Derived init") println(this.num) } } fun main() { Derived(300) } ------- Result ------ 출력 결과는 다음과 같음 Base 의 init 에서 호출하는 num 은 getter 인데, 이 getter 는 Derived 에서 override 되었음 그런데 Derived 의 num getter 에서 반환하는 field 는 아직 초기화되지 않아 Int 기본값 0을 반환 그래서 Base 의 this.num 에서는 반환받은 0을 출력함 Base init Derived getter 0 Derived init Derived getter 300
- 2
- 4
- 631
질문&답변
2021.12.03
AOP(TimeTraceAop)를 @Component 로 선언 vs SpringConfig에 @Bean으로 등록
같은 현상이 있어, 질문 올리려다 찾았습니다. 감사합니다!
- 41
- 11
- 3.6K