동일한 이름의 메서드나 프로퍼티를 사용할 필요가 있을 경우에 override 키워드를 사용해서 재정의할 수 있다.
오버라이드할 때는 프로퍼티나 메서드도 클래스처럼 앞에 open을 붙여서 상속할 준비가 되어 있어야 한다.
상속할 메서드 앞에 open 키워드를 붙이면 오버라이드할 수 있지만, open 키워드가 없는 메서드는 오버라이드할 수 없다.
open class BaseClass {
open fun opened() {
}
fun notOpened() {
}
}
class ChildClass: BaseClass() {
override fun opened() {
} (O)
override fun notOpened() {
} (X) // notOpened 메서드는 open 키워드가 없으므로 재정의가 불가능하다.
}
프로퍼티 역시 open으로 열려 있어야만 오버라이드할 수 있다.
open class BaseClass2 {
open var opened: String = "I am"
}
class ChildClass2: BaseClass2() {
override var opened: String = "You are"
}
코틀린은 클래스, 메서드, 프로퍼티에 대해 익스텐션을 지원한다. 이미 만들어져 있는 클래스에 다음과 같은 형태로 메서드를 추가할 수 있다.
fun 클래스.확장할 메서드() {
//코드
}
상속이 미리 만들어져 있는 클래스를 가져다 쓰는 개념이라면 익스텐션은 미리 만들어져 있는 클래스에 메서드를 넣는 개념이다.
실행 시에 도트 연산자로 호출해서 메서드를 사용할 수 있도록 해주는 것이다.
특별한 경우를 제외하고는 거의 메서드 확장 용도로 사용된다.
class MyClass {
fun say()
fun walk()
fun eat()
}
MyClass.say() {
// 실행코드
}
MyClass.walk() {
// 실행코드
}
MyClass.eat() {
// 실행코드
}