3.1.3 인터페이스 타입으로 변환
다음 조각은 숫자 시퀀스 값들의 평균을 계산한다.
IntSequence digits = new DigitSequence(1729);
double avg = average(digits, 100);
// 처음 시퀀스 4개의 값만 보게 된다.
digits 변수를 보자. digits의 타입은 DigitSequence가 아니라 IntSequence다. IntSequence 타입 변수는 IntSequence 인터페이스를 구현한 어떤 클래스의 객체라도 참조할 수 있다. 객체의 클래스가 인터페이스를 구현할 때는 이 객체를 해당 인터페이스 타입 변수에 할당할 수 있다. 또 이 객체를 해당 인터페이스를 기대하는 메서드에도 전달할 수 있다.
유용한 용어를 하나 알아 두자. T 타입의 모든 값을 변환 없이 S 타입의 변수에 할당할 수 있다면 S 타입은 T 타입(서브타입(subtype))의 슈퍼타입(supertype)이다. 예를 들어 IntSequence 인터페이스는 DigitSequence 클래스의 슈퍼타입이다.
Note ≣
인터페이스 타입으로 변수를 선언할 수 있지만, 타입이 인터페이스 자체인 객체는 만들 수 없다. 모든 객체는 클래스의 인스턴스다.