[JAVA] 제네릭 공변


[JAVA] 제네릭 공변

Cage<Animal>이 Cage<Cat>의 상위 타입이 아니다. 만약 Cage<Animal>이 Cage<Cat>이 상위 타입이라고 한다면 첫 번째 빨간색 네모친 할당 부분이 가능하다. 그럼 두 번째 빨간색 네모친 부분에서 Dog은 Animal의 하위 클래스이기에 Push가 가능하다. 다만 세 번째에서 getAll을 하게 되면 List<Cat>이 리턴 값이나 두 번째에서 dog을 넣었기에 dog 리스트를 리턴한다. 이런 경우에 의해서 Cage<Animal>은 Cage<Cat>의 상위 타입이 아니다. 무변성 A가 B의 상위 타입일 때 GenericType<A>가 GenericType<B>의 상위 타입이 아니면 변성이 없다. 무변성 animal은 Cat의 상위 타입이지만 Cage<Animal>은 Cage<Cat>의 상위 타입이 아니다. 무변성일 때 문제 위와 같이 Dog을 상속받는 Small, CuteDog 구현 그리고 Dog cage에 사랑을 주는 Human class도 구현 그리고 ...


#공변 #자바 #자바공변 #자바제네릭 #제네릭

원문링크 : [JAVA] 제네릭 공변