다형성의 핵심은 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 의미한다. 인터페이스의 다형성은 그 의미를 효과적으로 실현한다.
구현 객체의 자동 타입 변환:
public class Main {
public static void main(String[] args) {
// A 인터페이스에 구현체 B 대입
A a1 = new B();
// A 인터페이스에 구현체 B를 상속받은 C 대입
A a2 = new C();
}
}
interface A { }
class B implements A {}
class C extends B {}
강제 타입 변환:
B b1 = (B) a1;
인터페이스의 다형성:
interface MultiRemoteController {
void turnOnOff();
void volumeUp();
void channelUp();
}
class LgTv implements MultiRemoteController {
private String name;
public LgTv(String name) { this.name = name; }
// ... (MultiRemoteController interface methods implemented)
}
class SamsungTv implements MultiRemoteController {
private String name;
public SamsungTv(String name) { this.name = name; }
// ... (MultiRemoteController interface methods implemented)
}
위의 코드에서 MultiRemoteController
라는 인터페이스를 통해 LG TV와 Samsung TV, 두 가지 다른 구현체를 동일하게 제어할 수 있다. 이는 다형성의 특징을 잘 나타내는 예시이다.