ComputerProgrammingwithGNUSmalltalk:5.3
다형성 (Polymorphism)
다른 종류의 객체들로 가득찬 세상에서 어떤 객체들은 다른 종류의 객체, 즉, 다른 클래스의 인스턴스이지만, 같은 메시지에 응답하는 경우가 있습니다. 이것은 어떤 프로그래밍 언어가 다른 클래스에서 같은 선택자로 메소드를 정의할 수 있도록 하는 이유입니다. 혹은 상위 클래스에서 물려받은 선택자의 행동을 하위 클래스에서 변경 가능합니다. 이것을 다형성polymorphism 이라고 합니다.
주의:
하위클래스에서 상위클래스로부터 상속 받은 메소드를 바꾸는 것을 오버라이딩(overriding)이라고 합니다.
이제 이 개념에 대해서 고전적이지만 아주 자명한 에제를 들어보겠습니다. Animal이라는 클래스와 두 하위클래스 Dog과 Cat을 생각해보십시오. Animal 클래스에서는 speak 메소드를 구현할 것입니다. 왜냐하면 동물은 어떤 종류의 잡음을 내는 것으로 다른 생물과 소통하기 때문입니다 (개는 소리를 내는 것보다 깨무는 것으로 소통하기도 합니다만). 그러나 이 메시지를 보냈을 때, 개들은 짖을 것이며, 고양이는 야옹거릴 것입니다. 따라서 다른 방식으로 같은 메시지에 응답한다는 것입니다.