다형성의 개념을 사용할 때 클래스 계층 구조를 작성하고 부모 참조를 사용하면 어떤 특정 유형에 객체가 있는지 몰라도 인터페이스 함수를 호출합니다. 대단하다. 예:
당신은 동물의 컬렉션을 가지고 있으며 모든 동물 기능을 호출하고 eat
그것이 개를 먹는 것인지 고양이인지는 신경 쓰지 않습니다. 상속 클래스에서 구현 다른 것보다 -하지만 같은 클래스 계층 구조에서 당신은 추가로이 동물이 Animal
예를 들어 makeEggs
, getBackFromTheFreezedState
등등을. 따라서 어떤 경우에는 기능을 수행하여 추가 동작을 호출하는 특정 유형을 알고 싶을 수도 있습니다.
예를 들어, 경우에 아침 시간과 그 다음 당신이 전화를 그냥 동물의 경우 eat
는 인간이고, 그렇지 않은 경우, 먼저 전화를 washHands
, getDressed
단지 다음 전화 eat
. 이 경우를 처리하는 방법? 다형성이 죽습니다. 코드 냄새처럼 들리는 객체의 유형을 찾아야합니다. 이 경우를 처리하는 일반적인 방법이 있습니까?
Eater
와 인터페이스 eat()
방법을, 다음 클라이언트로, 당신은 것을 걱정하지 않는다 Human
구현 처음 호출이 washHands()
하고 getDressed()
는이 클래스의 구현 세부 사항을이다. 클라이언트로서이 사실에 관심이 있다면, 해당 작업에 올바른 도구를 사용하지 않을 가능성이 높습니다.
getDressed
전에 미리 해야 할 수도 있다는 점을 고려해야합니다 eat
. 상황에 따라 washHands();if !dressed then getDressed();[code to actually eat]
사람에게이를 구현하는 가장 좋은 방법 일 수 있습니다. 다른 가능성은 다른 것들이 그것을 필요로 washHands
하거나 getDressed
부르면 어떻게 될까요? 당신이 있다고 가정 leaveForWork
합니까? 어쨌든 오래 전에 호출되도록 프로그램 흐름을 구성해야 할 수도 있습니다.