Java’da Çok Biçimlilik (Polymorphism)
Çok Biçimlilik (Polymorphism) kavramı çoklu biçim ve çoklu şekil gibi anlamlar ifade eder. Yani polymorphism kullanılarak üretilen bir nesnemiz, farklı nesneler gibi davranabilir. Fakat temelde kalıtım kavramıyla iç içe bulunduğundan, kalıtım mantığını iyi bilmek gereklidir. Kalıtım konusunu tekrarlamak veya öğrenmek için linkden ulaşabilirsiniz.
Şimdi bi örnek vererek daha iyi anlayalım;
polymorphism.java;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
package polymorphism; class Telefon{ public void ekranaYaz() { System.out.println("Telefon Sınıfı"); } } class CepTelefon extends Telefon{//kalıtım yapıldı public void ekranaYaz() { System.out.println("CepTelefon Sınıfı"); } } class AkıllıTelefon extends Telefon{ public void ekranaYaz() { System.out.println("AkıllıTelefon Sınıfı"); } } class EvTelefon extends Telefon{ public void ekranaYaz() { System.out.println("EvTelefon Sınıfı"); } } public class polymorphism { public static void nesneGetir(Telefon t){ t.ekranaYaz(); } public static void main(String[] args) { Telefon t=new Telefon(); CepTelefon c=new CepTelefon(); AkıllıTelefon a=new AkıllıTelefon(); EvTelefon e=new EvTelefon(); nesneGetir(t); nesneGetir(e);//upcasting(özelden genele gidildiği için) nesneGetir(a);//upcasting nesneGetir(c);//upcasting } } |
Gördüğünüz gibi arkadaşlar nesneGetir() metodu Telefon tipinde bir parametre alıyor. Fakat Telefon sınıfından kalıtım yapılan diğer sınıflarımızda bu metodu parametreler gönderdik hiç bir sıkıntı ile karşılaşmadık, çünkü zaten bizim gönderdiğimiz nesne parametreleri birer Telefondan üretildiği için zaten AkıllıTelefonda bir Telefondur mantığı ile hareket eildiğinden.
Instanceof ile Tip Kontrolü
Bu anahtar keelime ile oluşturduğumuz nesnelerin hangi sınıfta yer aldığımıza yardımcı olur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
package polymorphism; class A{ } class B{ } class A1 extends A{ } class B1 extends B{ } class B2 extends B1{ } public class instanceo { public static void main(String[] args) { A a= new A(); B b= new B(); A1 a1= new A1(); B1 b1= new B1(); B2 b2= new B2(); System.out.println(a instanceof A); System.out.println(a1 instanceof A); System.out.println(b instanceof B); System.out.println(b2 instanceof B); System.out.println(a1 instanceof A1); System.out.println(b1 instanceof B1); System.out.println(b2 instanceof B2); } } |
Arkadaşlar gördüğünüz gibi hepsi true değerini döndürdü çünkü tanımlanan nesneler kendi üretildikleri sınıf elemanlarından oldukları için …