프로그램은 언제나 변화하고 요구사항은 변한다. 프로그램이 가져야 할 덕목은 변경에 유연하게 대처할 수 있는 자세이다. 1장에서 자율성을 부여한 객체는 그 자체로 변경에 유연한 구조를 가질 수 있다. 하지만 그 외에도 예외사항은 발생한다. 할인이라는 역할에 대해서 다양한 객체가 동일한 역할을 수행할 수 있는 경우 누구에게 역할을 할당할 것인가? 이러한 상황에서 유용하게 사용할 수 있는 것이 상속과 인터페이스 이다. 추상화된 계층을 사용하여 같은 역할을 하는 클래스를 하나의 추상화된 인터페이스나 부모클래스로 묶음으로써 인자로 전달되는 과정에서 같은 역할을 구현한 다양한 클래스를 사용할 수 있다. 이렇게 변경하는 경우 새로운 정책이나 새로운 변경사항에 대해서는 같은 추상체를 구현 혹은 상속받는 클래스를 추가함으로써 내부 코드의 수정없이 새로운 정책을 추가할 수 있는 장점을 갖는다.
다형성을 이용한 프로그래밍이 항상 장점만 있는 것은 아니다. 다형성을 이용하게 개발하게 되면 변화에 유연하게 대처할 수 있고 높은 수준에서 즉 추상화된 수준에서 요구사항의 정책을 서술할 수 있다는 장점을 가지지만 디버깅이 어려워지고 프로그램을 이해하는 것이 어려워진다 변화를 예측하고 미리 유연한 프로그램을 구성하기 보다는 단순하면서도 간결한 프로그램에서 요구사항의 변화가 어느정도 정해졌을 때 추상화를 통해 이를 포장하는 것이 바람직한 관점이다.
상속은 코드를 재사용하기 위해서 널리 사용되는 기법이다. 하지만 재활용을 위해 사용되는 것이 아니라 부모 클래스의 인터페이스를 관리하기 위해서 사용된다.
상속과 합성을 고르게 사용함으로써 다형성의 의미를 더욱 잘 사용할 수 있다.
추가적으로 다형성은 동적바인딩을 통해 컴파일시점에서 반영되는 코드와 실행시점에서 사용되는 객체가 다르다. 이를 이용하여 동작하는 방식을 의미하고 대부분의 디자인패턴은 이러한 다형성을 활용하여 구현된다.