Menu

Java Arabirimleri: Sözleşmeleri Tanımlama ve implements

Java arabiriminin ne olduğu, nasıl tanımlanıp uygulanacağı, default ve static metotlar ve arabirimlerin soyut sınıflardan nasıl farklı olduğu.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

Arabirim Bir Sözleşmedir

Bir arabirim, bir sınıfın nasıl yapacağını söylemeden neyi yapabileceğini bildirir. Onu uygulayan herhangi bir sınıfın yerine getirmeyi taahhüt ettiği bir metot imzaları listesidir. Asıl amaç ayrıştırmadır: kod, arabirim türüyle çalışabilir ve arkasında hangi somut sınıfın olduğunu umursamaz.

Circle implements Shape, Circle sınıfının area ve perimeter metotlarını tanımlaması gerektiği anlamına gelir. Bunu yaptığında, bir Circle artık bir Shape'tir ve bir Shape değişkeninde saklanabilir.

Çok Sayıda Sınıf, Tek Bir Tür

Asıl güç, birbiriyle ilgisiz birkaç sınıf aynı arabirimi uyguladığında ortaya çıkar. Shape'e göre yazılmış kod, hepsini işler:

Döngü asla "bu bir Circle mı yoksa Rectangle mı?" diye sormaz - yalnızca area() çağrısı yapar ve sözleşmeye güvenir. Daha sonra bir Triangle eklemek, burada hiçbir değişiklik gerektirmez.

Birden Çok Arabirimi Uygulama

Bir sınıf yalnızca tek bir sınıfı genişletir, ancak istediği kadar arabirimi uygulayabilir - Java davranışın "çoklu kalıtımını" güvenli biçimde böyle gerçekleştirir:

Arabirimleri implements sözcüğünden sonra virgülle ayırarak listeleyin. Sınıfın hepsini karşılaması gerekir.

default ve static Metotlar

Java 8'den beri bir arabirim metot gövdeleri içerebilir. Bir default metot, onu uygulayan sınıflara bedavaya miras aldıkları (ve geçersiz kılabilecekleri) hazır bir uygulama verir:

default metotlar, bir arabirimin gelişmesine olanak tanır - mevcut tüm uygulayıcıları bozmadan bir metot eklemeyi mümkün kılar. Buna karşılık bir static arabirim metodu, Comparator.naturalOrder() gibi doğrudan arabirimin kendisi üzerinden çağırdığınız bir yardımcıdır.

Sabitler

Bir arabirimdeki alanlar örtük olarak public static final'dır - bunlar sabittir, örnek durumu değil:

interface Physics {
    double GRAVITY = 9.81;   // automatically public static final
}

Arabirimler geleneksel olarak nesne başına durum tutmaz; örnek alanlarının yokluğu, onları sınıflardan ayıran şeyin bir parçasıdır.

İşlevsel Arabirimler

Tam olarak bir soyut metoda sahip bir arabirim işlevsel arabirimdir ve onu bir sınıfın tamamı yerine bir lambda ifadesiyle uygulayabilirsiniz:

Bu, Java'nın lambda ifadelerinin ve java.util.function türlerinin (Function, Predicate, Supplier ve benzerleri) temelidir. @FunctionalInterface ek açıklaması, amacı açık hale getirir ve derleyicinin tek metot kuralını dayatmasını sağlar.

Arabirim ile Soyut Sınıf Karşılaştırması

Her ikisi de bir soyutlamaya göre programlamanıza olanak tanır, peki hangisini ne zaman seçersiniz?

  • Arabirim - birbiriyle ilgisiz sınıfların paylaşabileceği bir yetenek. Bir Bird ve bir Airplane ikisi de Flyable olabilir. Bir sınıf çok sayıda arabirimi uygulayabilir. Örnek durumu yoktur.
  • Soyut sınıf - birbiriyle yakından ilişkili sınıflar arasında paylaşılan durum ve kod. Bir Cat ve bir Dog ikisi de Animal'ı genişletir ve ortak alanları ile kısmen uygulanmış metotları miras alır. Bir sınıf yalnızca birini genişletir.

Yaygın bir desen ikisini birleştirir: bir arabirim sözleşmeyi tanımlar ve bir soyut sınıf tekrar eden bölümleri uygular, böylece somut alt sınıflar yalnızca özgün ayrıntıları doldurur.

Sıradaki: Soyut Sınıflar

Arabirimler davranışı durum olmadan tanımlar. Soyut sınıflar arabirimlerle tam sınıflar arasında bir yerde durur - hem uygulanmamış metotları bildirebilir hem de alanları ve yapıcıları taşıyabilirler. Bir sonraki sayfanın konusu budur.

Sıkça Sorulan Sorular

Java'da arabirim (interface) nedir?

Arabirim bir sözleşmedir: bir sınıfın sağlamayı taahhüt ettiği bir dizi metot imzası (ve sabit). Bir sınıfın ne yapabileceğini söyler, nasıl yapacağını değil. Bir sınıf, bir arabirimi benimsemek için implements anahtar sözcüğünü kullanır ve arabirimin bildirdiği her soyut metot için bir gövde sağlamak zorundadır. Arabirimler, birbiriyle ilgisiz sınıfların paylaşılan bir tür üzerinden birbirinin yerine kullanılmasını sağlar.

Java'da arabirim ile soyut sınıf arasındaki fark nedir?

Bir sınıf birçok arabirimi uygulayabilir ancak yalnızca bir (soyut) sınıfı genişletebilir. Arabirimler geleneksel olarak hiçbir örnek durumu tutmaz ve yalnızca davranış bildirir; soyut bir sınıf ise alanlara, yapıcılara ve kısmen uygulanmış mantığa sahip olabilir. Birbiriyle ilgisiz birkaç sınıfın paylaşabileceği bir yeteneği tanımlamak için arabirim kullanın; birbiriyle yakından ilişkili alt sınıflar arasında ortak durum ve kodu paylaşmak için soyut sınıf kullanın.

Bir Java arabiriminin metot gövdeleri olabilir mi?

Evet, Java 8'den beri. default olarak işaretlenmiş arabirim metotları, uygulayan sınıfların miras aldığı (ve geçersiz kılabileceği) bir gövde sağlar; static arabirim metotları ise doğrudan arabirimin kendisi üzerinden çağrılabilen yardımcı davranış sunar. Sıradan arabirim metotları hâlâ soyuttur -yalnızca bir imza- ve uygulayan sınıfların bunları tanımlaması gerekir.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA