Interface Nedir?
Interface yazısını okumadan önce Abstract Class Nedir? ve Inheritance Nedir? yazılarını okumanızı tavsiye ederim.
Zira bu içerik yalnızca Abstract Class ile Interface arasındaki farkları anlatmaktadır. Bahsettiğim diğer içeriklerde konuyu kavramanız için gerekli bütün teorik bilgiler mevcuttur.
Interface ile Abstract Class Arasındaki Farklar :
- Interface erişim belirleyicisi public olur.
- Erişim belirleyicisi public olduğu takdirde, sınıfın içindeki bütün metodlar ve değişkenler public olur.
- Interface sınıf bildirimi interface takısı ile yapılır.
- Interface’de instance değişkenler içermez. Erişim belirleyicisi olmasa bile değişkenler static ve final damgalıdır. Dolayısıyla herhangi bir şekilde değiştirilemezler.
- Bir sınıf birden fazla interface implemente edebilir.
- Abstract Class’lar, alt sınıfların ortak değişken ve metotlarını topladığımız bir yapı sağlıyordu. Dilersek metotları soyut ifade edip, tanımlanmasını alt sınıflara (mecbur) bırakıyorduk. Java’da kalıtımda bir sınıf ancak bir üst sınıftan miras alabilir. Ancak bazen değişkenler olmadan, bazı sınıfların sadece aynı imzaya sahip belirli metotlarının olmasını isteriz. Interface bu durumda bize yardımcı olur.
- Interface belirli ortak metotların imzasını içeren, başka deyişle soyut metotlar içeren ancak değişkeni olmayan bir yapıdır. Bu bakımdan değişkenleri olmayan ve sadece soyut metotları olan, Abstract class kavramına bir açıdan benzer.
Örneğin, aşağıda Hareket interface’i ve Hareket abstract classı var. Bu iki sınıfta 3 benzer metot mevcut ve değişken tanımlı değil.
extends ile
implements ile
Bir sınıf, bir soyut sınıfı genişletirken(extends), bir arayüzü uygular(implements). Her ikisinde de (genişleten veya uygulayan) sınıf, (soyut sınıfın veya interface’in) soyut metotlarını örtmek(Override) zorundadır.
Peki Abstract Class Varken Neden Interface Kullanmalıyım?
Daha önce belirttiğimiz gibi bir sınıf ancak tek bir sınıfın mirasçısı olabilir. Ancak interface kullanarak çoklu kalıtım özelliği kazandırılabilir. Aşağıdaki örnekte görüldüğü gibi bir sınıf birden fazla interface implemente edebilir.