반응형
Kotlin Class
All classes in Kotlin have a common superclass, Any
Any has three methods: equlas(), hashCode(), toString()
By default, Kotlin classes are final - they can’t be inherited
코틀린 클래스는 기본적으로 Any를 상속하고 있다. 또한, 기본적으로 final로 선언되어 있어 상속할 수 없다. 상속 가능한 클래스로 만들기 위해서는 open 키워드를 명시해야 한다.
open class Base(pp1: Int)
class Derived(pp1: Int): Base(pp1)
If the derived class has no primary constructor, then each secondary constructor has to initialize the base type using the super keyword
자식 클래스에서 주 생성자가 없는 경우 보조 생성자를 통해 부모 클래스를 초기화(super) 해주어야 합니다.
class MyView : View {
constructor(ctx: Context) : super(ctx)
constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs)
}
Kotlin Method
Kotlin requires explict modifiers for overridable members and overrides
open class Shape {
open fun draw() { /*...*/ }
fun fill() { /*...*/ } // 상속 불가능
}
class Circle() : Shape() {
override fun draw() { /*...*/ }
}
코틀린에서 속성과 메서드도 open 키워드를 붙여야 오버라이딩 할 수 있습니다.
Derived class initialization order
During the construction of a new instance of a derived class, the base class initialization is done as the first step, which means that is happens before the initialization logic of the derived class is run
부모 클래스는 자식 클래스가 실행되면 초기화가 이루어집니다.
Kotlin에서 open Property를 사용하는 경우, 부모 클래스의 초기화 과정에서 해당 Property도 초기화가 이루어진 다음에 오버라이딩됩니다.
open class Base(val name: String) {
init { println("Initializing a base class") }
open val size: Int =
name.length.also { println("Initializing size in the base class: $it") }
}
class Derived(
name: String,
val lastName: String,
) : Base(name.replaceFirstChar { it.uppercase() }.also { println("Argument for the base class: $it") }) {
init { println("Initializing a derived class") }
override val size: Int =
(super.size + lastName.length).also { println("Initializing size in the derived class: $it") }
}
fun main() {
println("Constructing the derived class(\\"hello\\", \\"world\\")")
Derived("hello", "world")
}
- Base 클래스 초기화 진행
- init 블록 초기화
- open val size 블록 초기화
- Derived 클래스 초기화 진행
- init 블록 초기화
- open val size 블록 초기화
반응형
'Kotlin' 카테고리의 다른 글
Kotlin 안전한 Null 처리 방법 : ?., ?:, !! 활용 및 SQL, 메모리 최적화 전략 (0) | 2024.12.16 |
---|---|
Kotlin init(생성자), constructor(보조 생성자), get, set 이해하기 (0) | 2024.12.15 |