근데 사전 배경에 이어서 요구사항이 생겼다.
금붕어 케이지에서 물고기 케이지로 이동시키자.
val goldFishCage = Cage<GoldFish>()
goldFishCage.put(GoldFish("금붕어1"))
val fishCage = Cage<Fish>()
fishCage.moveFrom(goldFishCage) // **Type Mismatch! 실패**
이거 왜 안되지?? 이제 알아보자
상속 관계에서 상위 타입과 하위 타입의 의미를 다시 생각해보자
무공변(in-variant)
**하다 라고 표현한다.여기서 말하는건 제네릭클래스까지 타입의 상속관계가 유지되지 않는다는게 핵심 내용이다.
자바에서는 배열의 경우
공변(co-variant)
**하다근데 공변하면 뭐가 문제지?
String[] strs = new String[] {"A", "B", "C"}
Object[] objs = strs; // 공변이라 가능
objs[0] = 1; // 여기가 문제임! 런타임에 에러가 발생한다.