Polymorphism çok şekillilik demektir. Bu konu kalıtım konusu ile iç içe geçmiş bir konudur. Kalıtım yolu ile oluşturduğumuz sınıfların birbiri yerine kullanılabilmesini sağlar. Örneğin Canli adında bir sınıfımızın olduğunu düşünelim. Daha sonra Bitki, Hayvan ve Insan adındaki sınıflarımızı Canli sınıfından extends ettiğimizi kabul edelim. Polymorphism sayesinde Canli sınıfından bir nesne referansı ile bitki, hayvan ve insan sınıfından oluşturduğumuz nesneleri gösterebiliriz. Bu ne işimize yarayacak derseniz, örneğin bizim bitki, hayvan ve insan için aynı işi yapmasını istediğimiz bir metot olsun. Normal şartlarda bu iş için 3 ayrı metot yazıp kod tekrarı yapmamız gerekecekti ancak polymorphism sayesinde tek bir metot yazıp bu 3 ayrı nesne için sadece canli sınıfından bir nesne alabiliriz. Daha sonra bu metoda insan, hayvan veya bitki sınıfından bir nesne gönderildiğinde hangi nesne gönderilmiş olursa olsun o nesne gibi davranış sergileyecektir.
Üst sınıf nesnesinin bir alt sınıf nesnesini göstermesine upcasting nedir. Bunun tam tersi de mümkündür. Yani insan sınıfından bir nesne canli sınıfından bir nesneyi gösterebilir. Bu işleme de downcasting denir. Ancak bu işlemde dikkat edilmesi gereken yer bu işlemi gerçekleştirirken alt sınıfın tipinin belirtilmesi gerektiğidir.
class Canli {
public void sesCikar() {
System.out.println("ses çıkarma");
}
}
class Insan extends Canli {
@Override
public void sesCikar() {
System.out.println("konuşma");
}
}
class Hayvan extends Canli {
@Override
public void sesCikar() {
System.out.println("bağırma");
}
}
public class Example {
public static void main(String[] args) {
Insan insan1 = new Insan();
Hayvan hayvan1 = new Hayvan();
Canli canli2 = new Canli();
// Upcasting
Canli canli1 = insan1;
canli1.sesCikar();
// Downcasting
Insan insan2 = (Insan) canli1;
insan2.sesCikar();
// Polymorphism
polymorphism(canli1);
polymorphism(insan2);
polymorphism(hayvan1);
polymorphism(canli2);
}
public static void polymorphism(Canli c) {
c.sesCikar();
}
}
yeni başlayanlar için güzel bilgiler. teşekkür ederim.
ReplyDeleteJava eğitimini öğrenin