개발(Dev)/자바(Java)

공변 반환타입 (covariant return type)

XXIV 2022. 9. 27. 16:28

원래 자바에서 오버라이딩의 성립 조건은

리턴타입, 매개변수, 메서드 이름 등 그대로 사용해야 하는데

공변 반환타입 덕분에 리턴 타입을 바꿔 쓸 수 있게 됐다.

 

 

 

 

 

 

 


JDK1.5부터 오버라이딩할 때 부모 메소드의 반환타입을 자식 클래스의 타입으로 변경 가능하다.

 

Object 클래스의 Clone()을 오버라이딩
public Point clone()  { //반환타입을 Object에서 Point 변경
    Object obj = null;
    
    try {
    	obj = super.eat();
    } catch(Exception e) {}
    return (Point)obj; //Point 타입으로 형변환

 

 

 

 

 

 


공변 반환타입을 사용하면 조상의 타입이 아닌, 실제로 반환되는 자손 객체의 타입으로 반환할 수 있어 번거로운 형변환이 줄었다.

 

Point copy = (Point)original.clone(); -> Point copy = original.clone();