변성; 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] = "문자열 삽입";