구현 객체를 교체하여 프로그램 실행 결과가 다양해지는데 이를 인터페이스의 다형성이라고 한다.
구현 객체가 인터페이스 타입으로 변환되면 자동 타입 변환에 해당된다.
인터페이스 변수 = 구현객체;
구현클래스 변수 = (구현클래스) 인터페이스 변수
다형성
프로그램은 많은 객체들이 서로 연결되고 각자의 역할을 한다. 이 객체들은 서로 다른 객체로 교체될 수 있어야한다
->실행 도중에 어떤 객체를 필드로 저장하느냐에 따라 실행 결과가 달라질 수 있다
class Car {
//필드
Tier leftTire = new Tire();
Tier rigthTier = new Tier();
}
Car 필드에는 2개의 Tier 타입 필드를 가지고 있다. Car 객체를 생성하면 2개의 Tier 필드에 각각 하나씩 Tire 객체가 들어가게 된다.
만약 타이어 교체가 필요할 경우
Car myCar = new Car();
myCar.leftTire = new HankookTire();
// 새로운 객체 HankookTire로 교체
Tire 타입인 leftTire는 원래 Tire 객체가 저장되어야 하지만 Tire의 자식 객체가 저장되어도 문제가 없다.