Polimorfizm kavramını kullandığınızda bir sınıf hiyerarşisi yaratırsınız ve ebeveyn referansını kullanarak, hangi türün nesneye sahip olduğunu bilmeden arayüz işlevlerini çağırırsınız. Bu harika. Misal:
Hayvan koleksiyonunuz var ve tüm hayvan fonksiyonlarını çağırıyorsunuz eatve bir köpek yemi mi yoksa kedi mi olduğunu umursamıyorsunuz. Miras ve sınıftan uygulanan diğerinden daha - Ama aynı sınıf hiyerarşisinde ek sahip hayvanlar var Animalörneğin makeEggs, getBackFromTheFreezedStatevb. Bu nedenle, bazı durumlarda işlevinizde ek davranışları çağırmak için belirli türü bilmek isteyebilirsiniz.
Örneğin, durumunda bu sabah zamanıdır ve o zaman çağrı sadece bir hayvan ise eatbir insandır aksi takdirde, daha sonra ilk çağrı washHands, getDressedve ancak o zaman diyoruz eat. Bu davalar nasıl ele alınır? Çok biçimlilik ölür. Kod kokusu gibi görünen nesnenin türünü bulmanız gerekir. Bu davaları ele almak için ortak bir yaklaşım var mı?
Eaterarabirim tanımlarsanız eat(), o zaman bir istemci olarak, bir Humanuygulamanın ilk çağırması gerekmediğini washHands()ve getDressed()bu sınıfın bir uygulama ayrıntılarını umursamadığını unutmayın . Bir müşteri olarak, bu gerçeği önemsiyorsanız, büyük olasılıkla iş için doğru aracı kullanmıyorsunuzdur.
getDressedonlardan önce yapması gerekebileceğini eat, öğle yemeği için durumun böyle olmadığını da düşünmelisiniz . Koşullarınıza bağlı olarak, washHands();if !dressed then getDressed();[code to actually eat]bunu bir insan için uygulamanın en iyi yolu olabilir. Başka bir olasılık, başka şeyler gerektirdiğinde washHandsve / veya getDressedçağrıldığında ne olur ? Varsayalım leaveForWork? Program akışınızı, bundan çok önce çağrılmış olacak şekilde yapılandırmanız gerekebilir.