Interface ve Abstract farkı

"Interface ile Abstract arasındaki farklar nelerdir?, Ne zaman Interface ne zaman Abstract sınıfları kullanmalıyız ?"

Interface ve Abstract sınıfları nesneye yönelik programlamanın en temel ve önemli kavramlarından biridir.  Abstract sınıfların genellikle IS-A(dır,dir) ilişkilerinde, kalıtım(inheritance) özelliğini kullanarak kod tekrarını azaltmak için kullanılır. Interface sınıflar ise daha çok CAN-DO(yapabilir) tarzı ilişkilerde değişen kavramları uygulamak için kullanılır.

Birde bu iki kavramın avantaj ve dezavantajlarına bakalım.


Sonuçta Abstract bir sınıfın bütün metodlarını abstract yaparak onu da aynı bir interface gibide kullanabiliriz.

İki sınıf arasındaki en büyük fark ise Abstract sınıfların tekli kalıtım(inheritance), Interface sınıfların ise çoklu kalıtım(multiple inheritance) olmasıdır. Bir sınıfı sadece bir sınıf (ya da abstract bir sınıftan) türetebiliriz. Ama interface sınıflarda ise bir sınıfı istediğimiz kadar interface sınıftan türetebiliriz. yani interface sınıflar abstract sınıflardan daha esnektir ama abstract sınıflara göre daha yavaştır. Hız ve esneklik arasında seçimi ise projeye göre karar vermeniz doğrudur diye düşünüyorum.

Abstract sınıflardaki değişiklik türettiğimiz sınıftaki herhangi bir alt sınıfı etkiliyor. Fakat interface sınıflarda bu tarz bir problem daha az interface içindeki bir metodu değiştirmedikçe hiç bir sınıf bundan etkilenmiyor. Geliştirdiğiniz sınıflar tamamen plug-in mantığı ile interface sınıflar sayesinde hiç problemsiz değiştirilebiliyor.

Erkan DURSUN