JAVA

오버라이딩 반환타입 불일치? 상속관계면 반환타입이 달라도 된다

히어로맛쿠키 2022. 7. 19. 12:59

오버라이딩 조건 중 하나는 반환타입이 같아야 한다는 것이다.

 

하지만 완전히 똑같아야 하는 것은 아니다.

기존 반환타입이 부모타입 & 오버라이딩한 반환타입이 자식타입인 케이스는 가능하다.

즉 오버라이딩시 반환타입을 변경하고 싶을 경우 상속관계가 있는 반환타입으로 변경할 수 있다.

 


 

[ 예시 상황 ]

 

xxxRepository가 CrudRepository<Entity, idType>을 상속하고있고

부모인 CrudRepository는 findAll()메서드를 가지고 있으며 반환타입은 Iterable<Entity>이다.

그러나 Iterable<Entity>로 반환하고 싶지 않고 그냥 List<Entity>로 반환하고 싶을 수도 있다. 

 

여기서 오버라이딩의 조건이 생각난다. 오버라이딩시 반환타입이 동일해야 한다는 조건이다.

하지만 반환타입이 동일하지 않다고 해서 망설일 필요가 없다!

Iterable의 하위타입이 List이므로 반환타입을 변경하여 오버라이딩 가능하다.

 

 

 

 

반응형