Overriding - covariant return type
Java tutorial에 보시면 다음과 같이 나와있습니다.
and the type of its parameters) and return type as an instance method in
the superclass overrides the superclass's method.
메소드 서명 부분(메소드 이름, 매변수의 수, 매개변수의 타입) 과 리턴 타입이 부모 클래스의 것과 같을 때 자식 클래스에 있는 메소드가 오버라이딩을 한다.
하지만 이게 끝이 아닙니다. 다음 문단에 보시면
method can also return a subtype of the type returned by the overridden
method. This is called a covariant return type.
오버라이딩 하는 메소드의 리턴 타입은 오버라이딩 당하는 메소드의 리턴타입의 하위 타입이 될 수 있습니다. 이것을 covariant return type이라고 한다는데 한글로는 뭐라고 해야하는지 모르겠네요.
코드로 확인해 보겠습니다.
[#M_ more.. | less.. | package override;
public class Animal {
public Animal getAnimal(){
return new Animal();
}
}
package override;
public class Cat extends Animal {
@Override
public Cat getAnimal(){
return new Cat();
}
}
//이클립스에서는 @Override에 빨간 불이 안들어오는 걸 보고도 오버라이딩이 적용된다고 생각할 수 있겠습니다.
_M#]
전 이 부분을 읽고나서 한 참 뒤 매개변수도 하위 타입으로 받아 들이게 되면 오버라이딩 아닌가~ 하는 생각으로 '외곡된 기억'을 가지게 되었고 다행히 열공하는 후배 덕분에 제가 '외곡된 기억'을 가지고 있었다는 사실을 알게 되었습니다.
머릿속으로 '맞다'라고 생각했던 것이 '외곡된 기억'일 수도 있다는 교훈을 얻게 됐네요.