Merhaba Arkadaslar,
Bu yazimda Java’nin can alici konusu olan Polymorphism /polimorfizm yani cok bicimlilik kavramindan bahsedecegim. Bir onceki yazimda bahsettigim uzere bir Java objesi birden fazla IS-A testini gecebilir.
Bir referans degiskeni sadece bir tek tipte olabilir ve tipi asla degismez.
Bir referans degiskeni, bir baska objeye atanabilir.
Bir referans degiskeni, class veya interface turunde olabilir.
Javada hatirlayacagimiz gibi bir sinif sadece tek bir sinifi kalitabilir (extends) , birden fazla arabirimi (interface) uygulayabilir (implements).
class B { } interface C { } public class A extends B implements C { void method1() { A a = new A(); Object o = a; B b = a; C c = a; } }
Ornegimizi inceleyecek olursak , A sinifi B sinifi kalitmakta ve C arabirimini uygulamaktadir.
A a = new A(); Object o = a; B b = a; C c = a;
Burada sadece A turunde bir tek obje yaratilmistir. Fakat 4 adet farkli turde (Object,B,C,A turlerinde) referans degiskeni vardir.(a,b,c,o) Bu referans degiskenleri ayni objeyi gostermektedir/referansta bulunmaktadir.
Yukaridaki ornekte oldugu gibi, bir alt sinifin referans degiskeni her zaman bir ust sinifin ya da arabirimin referans degiskenine atanabilir. Java da bu yapiya upcasting denir.
Bununla birlikte metotlarin cagrilmasi dinamik olarak gerceklesmektedir. Java da buna dynamic method dispatch denir.
A sinifi B sinifini kalittigi ve C arabirimini uyguladigi icin asagidaki IS-A testi dogrudur.
A IS-A B
A IS-A C
A IS-A Object
Bu yazim bir giris oldu, daha sonraki yazilarimda Overriding/Overloading konularindan bahsedecegim.