변성; Variance
타입의 상속 계층 관계에서 서로 다른 타입 간에 어떤 관계가 있는지를 나타내는 지표
공변성(Covariance)
서로 다른 타입 간에 함께 변할 수 있다는 특징을 말한다.
Liskov 치환 원칙에 해당된다.
특징
S가 T의 하위 타입이면 S[]는 T[]의 하위 타입이다.
List<S>는 List<T>의 하위 타입이다.
반공변성(Contravariance)
특징
S가 T의 하위 타입이면 T[]는 S[]의 하위 타입이다.
LIst<T>는 List<S>의 하위 타입이다.
다형성의 Up Casting과 Down Casting을 말한다.
// 공변성 S(자식||하위 클래스)가 T(부모||상위 클래스)의 하위 타입이라면...
Object[] covariance = new Integer[10];
// 반공변성 S(자식||하위 클래스)가 T(부모||상위 클래스)의 하위 타입이라면...
Integer[] contravariance = (Integer)covariance;
// 공변성 S(자식||하위 클래스)가 T(부모||상위 클래스)의 하위 타입이라면...
ArrayList<Object> covariance = new ArrayList<Integer>();
// 반공변성 S(자식||하위 클래스)가 T(부모||상위 클래스)의 하위 타입이라면...
Integer[] contravariance = (Integer)covariance;
와일드 카드; ?
상한 경계 와일드 카드; <? extends T>
하한 경계 와일드 카드; <? suuper T>
Object[] objectArray = new Long[1];
objectArray[0] = "문자열 삽입";