Kotlin
[Kotlin] open vs abstract
혀가 길지 않은 개발자
2021. 4. 5. 20:35
fun main() {
val button: View = Button()
button.click()
}
abstract class View {
abstract fun click()
}
class Button: View() {
override fun click() {
println("Button")
}
}

abstract class는 abstract fun을 가진다.
abstract fun의 바디는 구현할 수 없다.
fun main() {
val button: View = Button()
button.click()
}
open class View {
open fun click() {
println("View")
}
}
class Button: View() {
override fun click() {
super.click() // 없어도 됨
println("Button")
}
}

open class는 상속 가능한 클래스이다.
open fun은 override 가능한 함수이다.
open fun은 바디를 구현해야만 한다.
super.click()을 사용하지 않아도 된다.
fun main() {
val view: View = Button()
view.showOff()
}
open class View {
open fun click() {
println("View")
}
}
class Button: View() {
override fun click() {
super.click()
println("Button")
}
}
fun View.showOff() = println("View Show Off")
fun Button.showOff() = println("Button Show Off")

확장 함수를 사용하면 정적 타입에 의해 어떤 확장 함수가 호출될지 결정되지,
동적인 타입에 의해 확장 함수가 결정되지 않는다.