Bu yazımda Interface (Arayüz) Nedir ve Kullanımı hakkında bilgi vereceğim.Interface (Arayüz) türkçe karşılık olarak arayüz anlamına gelmektedir.Özellik olarak düşünülebilir.Bir sınıfımızın özelliklerini belirtir. Bu metotlar gövdesiz yani içi boş metotlardır.Sadece implements işlemi yapan sınıfın kullanması gereken metotları belirlemiş oluruz.Bu sayede birbirleri ile hiçbir ilişkisi olmayan sınıflar aynı arayüzü kullanabilir.
- Soyut sınıflardaki soyut metotlarla benzerdir.
- İçerisindeki bütün metotlar gövdesiz bir yapıya sahiptir.
- New anahtar sözcüğü ile oluşturulamazlar.
- Bir sınıf birden fazla interface implements edebilir.
- Arayüz içerisindeki bütün metotlar implements edilen sınıfta kullanılması zorunludur.
- Sade ve anlaşılır kod yazmamıza olanak sağlar.
- Interface’lerde değişken tanımlanabilir.Tanımlanan değişkenler public static ve final olarak tanımlanır.Implements eden sınıf tarafından değiştirilemezler.
- Bütün metotlar publictir.
- Interface üzerinde static metotlar tanımlanabilir.Fakat tanımlanan metotlar override edilemez.
Kısa bir örnek üzerinde açıklamaya çalışalım.
Bilet isminde bir interface olsun ve bunun içerisinde biletSat ve biletSatinAl metotları bulunsun.
[code lang=”java”]
public interfaceBilet {
public void biletSat();
public void biletSatinAl();
}
[/code]
A ve B firmalarının sınıflarını oluşturalım ve interface implements işlemini yapalım.
[code lang=”java”]
public class AFirmasi implements Bilet{
@Override
public void biletSat() {
System.out.println("A firması bilet sattı.");
}
@Override
public void biletSatinAl() {
System.out.println("A firması bilet satın aldı.");
}
}
[/code]
[code lang=”java”]
public class BFirmasi implements Bilet{
@Override
public void biletSat() {
System.out.println("B Firması bilet sattı.");
}
@Override
public void biletSatinAl() {
System.out.println("B Firması bilet satın aldı.");
}
}
[/code]
Bu kısımda AFirmasi sınıfımı ve BFirmasi sınıfımı implements işlemi yaptığım için interface üzerindeki bütün metotları kullanmak zorundayım.Yani AFirması sınıfımın içerisinde biletSat veya biletSatinAl metotlarımdan herhangi birini kullanmama gibi bir durum söz konusu değildir.
Test sınıfımızı oluşturalım.
[code lang=”java”]
public class Test {
public static void main(String[] args) {
Bilet b1=new AFirmasi();
b1.biletSat();
b1.biletSatinAl();
Bilet b2=new BFirmasi();
b2.biletSat();
b2.biletSatinAl();
}
}
}
[/code]
Çıktımız aşağıdaki şekilde olacaktır.

Bu yapı bize kodun esnekliğini sağlamaktadır.Interface Tasarım Desenlerinde yoğun olarak kullanılmaktadır.
Interface içerisinde default metotlarda kullanılabilir.Bunlar implements yapan sınıf tarafından override edilmek zorunda değildir.Dilendiği takdirde override işlemi yapılabilir.Bilet arayüzümüzde ufak bir değişiklik yapalım ve default bir metot ekleyelim.
[code lang=”java”]
public interface Bilet {
public default void biletler() {
System.out.println("Biletler default metot");
}
public void biletSat();
public void biletSatinAl();
}
[/code]
Burada default metot ekleme işlemi yaptığımız için gövdeli bir metot yazmamız gerekmektedir.Yazılan bu metot AFirması veya BFirması sınıflarımda override edilmek zorunda değildir.
Sınıflarımızı tekrar düzenleyelim.
[code lang=”java”]
public interface Bilet {
public default void biletler() {
System.out.println("Biletler default metot");
}
public void biletSat();
public void biletSatinAl();
}
[/code]
[code lang=”java”]
public interface Bilet {
public default void biletler() {
System.out.println("Biletler default metot");
}
public void biletSat();
public void biletSatinAl();
}
[/code]
[code lang=”java”]
public class BFirmasi implements Bilet{
@Override
public void biletSat() {
System.out.println("B Firması bilet sattı.");
}
@Override
public void biletSatinAl() {
System.out.println("B Firması bilet satın aldı.");
}
@Override
public void biletler() {
System.out.println("B firması biletleri.");
}
}
[/code]
Görüldüğü üzere AFirması sınıfımda default metotu override etmedik.Fakat BFirması sınıfımda override işlemi yaptık.Bu sayede AFirması sınıfından oluşturduğum nesne biletler() metoduna erişebilir.Kendi içerisinde override işlemi yapılmadığı için interface üzerindeki biletler() metodu içerisindeki işlemleri yapacaktır.BFirması sınıfının bir nesnesi oluştuğunda BFirması’nda override edilen biletler() metodunu çağıracaktır.Test sınıfımızı düzenleyip çıktımızı kontrol edelim.
[code lang=”java”]
public class Test {
public static void main(String[] args) {
Bilet b1=new AFirmasi();
b1.biletSat();
b1.biletSatinAl();
Bilet b2=new BFirmasi();
b2.biletSat();
b2.biletSatinAl();
b2.biletler();
b1.biletler();
}
}
[/code]

Görüldüğü üzere interface içerisinde default metot tanımlayabiliriz.Bu tanımladığımız default metot implements edilen sınıf içerisinde override edilmek zorunda değildir.