open class Foo {
open val x: Int get { ... }
}
class Bar1 : Foo() {
override val x: Int = ... //Property도 override가 가능하다.
}
open class Base {
open fun v() {}
fun nv() {}
}
class Derived : Base() {
override fun v() {}
//open 키워드가 없는 Property와 function은 final이기 때문에 override를 할 수 없다.
}
interface Foo {
val count: Int
}
class Bar1(override val count: Int) : Foo
class Bar2 : Foo { // interface는 생성자를 필요로 하지 않기 때문에 ()를 붙이지 않는다.
override var count = 0 // val을 var로도 override할 수 있다. 그 반대는 불가하다.
}