Daha önceki yazılarımızda Java dilinde abstraction işlemi için iki farklı yapının kullanıldığından bahsetmiştik. Bu yapılardan biri Abstract Class diğeri ise Interface olarak isimlendirilmektedir. Benzer amaçlarla kullanılan ve birbirlerine oldukça benzeyen abstract ve inteface yapıları, bazı önemli konularda birbirlerinden ayrılmaktadır. Bu yazıda, abstract class v interface farklarını sıralayacağız. İşte abstract ve interface farkları.
- Ayrıca Bkz;
Abstract class | Interface |
---|---|
1) Abstract sınıflar, abstract metodlar ile birlikte abstract olmayan metodları da içerebilir. | Interface ise yalnızca abstract metodları içerebilir. Fakat Java 8 ile birlikte istisnai bir durum olarak default ve static kelimeleri ile non-abstract methodlar oluşturmak mümkün hale gelmiştir. |
2) Abstract class multiple inheritance’ı desteklemez | Interface multiple inheritance’ı destekler. Yani bir class veya interface birden fazla interface’in alt sınıfı olabilir. |
3) Abstract class, final, static olan veya olmayan değişkenler içerebilir. | Interface ise yalnızca static ve final değişkenler içerebilir. |
4) Abstract class bir interface’e implement edilebilir. | Interface ise bir class’a implement veya extend edilemez. |
5) Bir sınıfı abstract class’a çevirmek için abstract kelimesinin kullanılması zorunludur. Aynı şekilde abstract class içerinde oluşturulacak abstract metodlar için de abstract kelimesi kullanmak gerekir. | Interface bizzatihi abstract olduğu için abstract kelimesini metotta veya interface ismi yanında kullanmaya gerek yoktur. |
6) Abstract class bir interface’e implement veya bir class’a extend edilebilir. | Bir interface yalnızca başka bir interface’e extend edilebilir. |
7) Abstract class elemanları için private, protect, public vb erişim belirteçleri kullanılabilir. | Interface elemanları public veya default’tur. |
8) Abstract class, isminden de anlaşılabileceği gibi bir class’tır. | Interface ise bir class değildir. |
9)Örnek: public abstract class OrnekClass{ public abstract void run(); } |
Örnek: public interface OrnekInterface{ void run(); } |
Abstract class’lar ile Inteface’lerin paylaştığı çok sayıda ortak özellik olmak üzere, ayrıştığı alanlar ve özellikler bu şekildedir. Konuyla ilgili daha detaylı bilgiler için sitemizde bulunan Abstract ve Interface konuları ile ilgili yazıları inceleyebilirsiniz.