해결된 질문
작성
·
79
·
수정됨
0
@Test @DisplayName("부모 타입으로 조회시,자식이 둘 이상 있으면,빈이름을 지정하면 된다.") void findBeanByParentTypeBeanName(){
DiscountPolicy rateDiscountPolicy=ac.getBean("rateDiscountPolicy",DiscountPolicy.class);
assertThat(rateDiscountPolicy).isInstanceOf(RateDiscountPolicy.class);
이럴경우
//rateDiscountPolicy로 부터 반환된 실제 객체는 RateDiscountPolicy타입이고
rateDiscountPolicy변수내에 담긴 실제객체가 RateDiscountPolicy타입의 인스턴트인지 비교한다고 커뮤니티에 설명을 해주셧엇는데
assertThat(rateDiscountPolicy).isInstanceOf(DiscountPolicy.class);
왜 이런 경우에도 테스트가 성공되는걸까요?
rateDiscountPolicy로 부터 반환된 실제 객체는 RateDiscountPolicy타입이지 DiscountPolicy타입은 아니지 않나요?
답변 1
0
안녕하세요. 알고리즘가즈앙님, 공식 서포터즈 y2gcoder입니다.
해당 테스트가 성공하는 이유는 자바의 다형성 때문입니다.
rateDiscountPolicy
는 RateDiscountPolicy
클래스의 인스턴스기도 하지만, RateDiscountPolicy
가 구현하고 있는 DiscountPolicy
인터페이스의 인스턴스이기도 합니다!
영한님의 김영한의 실전 자바 - 기본편 > 섹션 11. 다형성1 부분을 학습해보시는 것을 추천합니다!
특히 해당 테스트 코드는 자바의 instanceof 지시어랑 동일한 역할을 한다고 이해해주시면 감사하겠습니다 🙂
감사합니다.