오버라이드(무효로하다): 상속받은 프로퍼티와 메서드의 재정의
- 상속받은 부모 클래스의 프로퍼티와 메서드 중에 자식 클래스에서는 다른 용도로 사용해야 하는 경우가 있습니다.
- 앞의 예제에서 Parent 클래스의 메서드를 sayHello로, Child 클래스의 메서드를 myHello라 했는데 이런 경우가 오버라이드(Override)가 필요한 대표적인 경우이다.
-> 즉, 오버라이드로 Child 클래스의 메서드도 sayHello라고 하는 것이 의미상 더 적합하다.
이처럼 자식 클래스에서 부모 클래스와 동일한 이름의 메서드나 프로퍼티를 사용할 필요가 있을 경우에 override 키워드를 사용해서 재정의할 수 있다.
- 오버라이드할 때는 프로퍼티나 메서드도 클래스처럼 앞에 open을 붙여서 상속할 준비가 되어 있어야 한다.
a. 메서드 오버라이드
- 상속할 메서드 앞에 open 키워드를 붙이면 오버라이드할 수 있지만, open 키워드가 없는 메서드는 오버라이드할 수 없다.
- 클래스의 세컨더리 생성자를 여러 개 중복해서 사용할 수 있는 것도 오버라이딩이 가능하기 때문이다.
open class BaseClass {
open fun opened() {
}
fun notOpened(){
}
}
class ChildClass: BaseClass(){
override fun opened(){ // 만약 override하지 않았다면 다른 함수명을 적었었어야 함,
}
override fun notOpened(){ // notOpened 메서드는 open 키워드가 없으므로 잘못된 사용입니다.
}
}
b. 프로퍼티 오버라이드
- 매서드 오버라이드처럼 프로퍼티 역시 open으로 열려 있어야만 오버라이드할 수 있다.
open class BaseClass2 {
open var opened: String = "I am"
}
class ChildClass2: BaseClass2(){
override var opened: String = "You are"
}