java 1.5 이상해서는 제네릭의 일부기능으로 convariant return type 기능이 추가됬다. 서브 클래스의 오버라이딩한 메소드에서는 반환 객체의 더많은 정보를 제공할수 있으며 클라이언트 코드에서는 반환 객체를 서브 클래스 타입으로 캐스팅 할 필요없다.
// object clone() 이 아니여도 된다. return 타입에 되서는 Genric 기능이 제공됨!
@Override public PhoneNumber clone() {
try {
return (PhoneNumber) super.clone();
} catch(CloneNotSupportedException e) {
throw new AssertionError(); //여기서는 이 예외가 생길 수 없다
}
@Override public Stack clone() {
try {
Stack result = (Stack) super .clone();
result.elements = elements.clone();
} catch(CloneNotSupportedException e) {
throw new AssertionError(); //여기서는 이 예외가 생길 수 없다
}