JAVA
오버라이딩 반환타입 불일치? 상속관계면 반환타입이 달라도 된다
히어로맛쿠키
2022. 7. 19. 12:59
오버라이딩 조건 중 하나는 반환타입이 같아야 한다는 것이다.
하지만 완전히 똑같아야 하는 것은 아니다.
기존 반환타입이 부모타입 & 오버라이딩한 반환타입이 자식타입인 케이스는 가능하다.
즉 오버라이딩시 반환타입을 변경하고 싶을 경우 상속관계가 있는 반환타입으로 변경할 수 있다.
[ 예시 상황 ]
xxxRepository가 CrudRepository<Entity, idType>을 상속하고있고
부모인 CrudRepository는 findAll()메서드를 가지고 있으며 반환타입은 Iterable<Entity>이다.
그러나 Iterable<Entity>로 반환하고 싶지 않고 그냥 List<Entity>로 반환하고 싶을 수도 있다.
여기서 오버라이딩의 조건이 생각난다. 오버라이딩시 반환타입이 동일해야 한다는 조건이다.
하지만 반환타입이 동일하지 않다고 해서 망설일 필요가 없다!
Iterable의 하위타입이 List이므로 반환타입을 변경하여 오버라이딩 가능하다.
반응형