강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của roberts
roberts

câu hỏi đã được viết

Hướng dẫn dành cho người mới bắt đầu sử dụng Java và Kotlin

Bài 10. Cách xử lý kế thừa trong Kotlin

내용 이해 질문

Đã giải quyết

Viết

·

51

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")
    }
}
  1. open 키워드는 기본적으로 상속을 받을 클래스에 붙여주며, abstract 과 같이 반드시 구현해야 하는 클래스에는 따로 명시적으로 붙여주지 않는 것으로 이해가 되었습니다.

  2. 예시의 Base 클래스와 Derived 클래스에서 getMember() 호출 시, 초기 값이 나온 부분은 실제 Derived 클래스에서 생성자를 호출하고 그 생성자가 상위 클래스 생성자를 호출하고 그 생성자에서 number를 출력하려고 하는데 해당 number는 오버라이딩 되었으니, 하위 클래스의 number를 출력해야 하나, 해당 하위 클래스 생성자 호출 전이므로 초기 값 0이 나온다?라고 이해하면 좋을까요?

제가 이해한게 잘 맞는지 혹은 잘못되게 생각한 부분이 있는지 확인해주시면 감사드리겠습니다! 🙂

실무에서 이런 케이스를 겪어본 적이 없어서 헷갈리는 것 같아서 이번 기회에 제대로 알아가보려구요!

javakotlin객체지향

Câu trả lời 1

1

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

안녕하세요! 🙂 네 맞습니다! number를 가져오려고 하지만, 하위 클래스의 number는 아직 생성자가 호출되기 전이라 기본값 (이 경우는 Java로 decompile 해보시면 primitive int가 있기에 기본값이 0이 됩니다) 이 나오게 됩니다.

다음 질문에서도 한 번에 답변 드릴 수 있도록 하겠습니다. 🙇

Hình ảnh hồ sơ của roberts
roberts

câu hỏi đã được viết

Đặt câu hỏi