Subclass içinde override edilmiş(overload değil!) bir metod çağırıldığında, subclass içindekinin mi yoksa superclass içindekinin mi çağırılacağının run-time sırasında dinamik olarak belirlenmesine Dynamic Dispatch denir.
Hemen bir örnekle :
1 2 3 4 5 6 7 8 9 | public class Hayvan{ public Hayvan(){} public void sesCikar(){System.out.println("AbidikGubidik");} } public class Kopek extends Hayvan{ public Kopek(){} @Override public void sesCikar(){System.out.println("BarkHavBarkHav");} } |
şeklinde iki class’ım olsun. Kopek sınıfımı, Hayvan sınıfımdan türetmiş olayım. Aşağıdaki işlem sırasında;
Hayvan minnos = new Hayvan(); Hayvan fino = new Kopek(); minnos.sesCikar(); fino.sesCikar();
minnos’un çıkaracağı ses bellidir -> “AbidikGubidik”
fino.sesCikar() fonksiyonu çağırıldığındaysa Dynamic Dispatch yapılır. fino’nun referansı hayvan olsa bile, Kopek sınıfıyla initialize edildiğinden fino “BarkHavBarkHav” sesi çıkaracaktır.
Not : Java’da override ettiğiniz bir metodun önüne @Override notunu(annotation) yazmasanız da olur. Yazarsanız, compile time errorların azalmasına, compilerın daha kolay işini görmesine yardımcı olursunuz.
Paylaşım için teşekkürler
Daha çok zaman bulup daha çok paylaşım yapabilmen dileğiyle
Link | Mayıs 28th, 2011 at 00:26