
Daha sonra şöyle bir sorunla bizden evcil hayvanlara ait olan ‘oyna’ ve ‘sevimli ol’ gibi metodların kedi ve köpek gibi evcil hayvanlara dahil etmemiz isteniyor. Bunu yapmanın birçok yolu geliyor hemen aklımıza ilki hayvan adlı abstract sınıfın içerisine bunları abstract metodlar olarak dahil ederek tüm aly sınıflarda bu özelliklerin sağlanmasını garantiye almak. Ancak bu çözüm yolu nesne yönelimli programlamanın birçok prensibini altüst ediyor çünkü bu durumda aslan ve kaplan gibi hayvanlara da gövdesini doldurmasak bile sevimliol() oyna() gibi metodlara sahip olma imkanı sağlıyor. Bu durumda bu yöntemin sorunumuzu çözmediğini görüyoruz ve başka bir çözüm yolu aramaya devam ediyoruz.Bir başka çözüm yolu da kedi ve köpek gibi evcil hayvanlara ait olan sınıfların içine ayrı ayrı evcil hayvanlara ait metodları yazmak olabilir. Ancak bu durumda da polimorfizm gibi bir özelliği kullanmaktan mahrum oluyoruz. Ayrıca aynı işlevi yapmak için yazılmış metodlar farklı isimlerde olabilir örneğin kedi için sevimliOl() adını verdiğimiz metodun karşılığı köpek içerisinde tatlıOl() şeklinde olabilir bu da çeşitli karışıklıklara neden olur.
Bu sorunu çözecek en iyi çözem yolu çoklu kalıtımdır! Ancak Java çoklu kalıtım çok fazla karışıklık yarattığından dolayı desteklemez. Peki bu durumda ne yapmamız gerekiyor?
İşte bu durumda imdadımıza Interface yetişiyor çünkü javada bir sınıfı birden çok abstract sınıftan extend edemeyiz ancak birçok interfaceden implemente edebiliriz. Ayrıca bir sınıfı bir abstract sınıftan ve bir veya birden çok interfaceden implemente etme şansımız da vardır.
Sorunumuza dönersek, Pet adında bir interface yazarız ve bu interface’in içerisinde sevimliOl() oyna() gibi gövdesi boş metodlar tanımlarız(interfacelerde içi dolu metodlar tanımlayamıyoruz sadece içi boş metodlar tanımlayabiliriz. İşte bu yüzden java abstract sınıflarla çoklu kalıtım yapmamıza izin vermediği halde interfacelerle çoklu kalıtım yapmamıza imkan sağlıyor. ). Daha sonra kedi ve köpek gibi evcil hayvanları hayvan sınıfından extend ve pet interface’den implement ederiz. Böylece nesne yönelimli programlamanın polimorfizm gibi çok değerli özelliklerinden faydalanabileceğiz.
Hiç yorum yok:
Yorum Gönder