Ana içeriğe geç
Modül 4 · Ders 1 ders 2Kurstaki 7/14~15 min
Modül dersleri (1/2)

Arayüzler

Soyut sınıflar hem kısmen uygulanmış kodu hem de örnek alanlarını içerebilirken, Java'daki arayüzler saf davranış sözleşmeleridir. Bir arayüz, bir sınıfın ne yapması gerektiğini tanımlar ancak bunu nasıl yapacağını tanımlamaz.

Bu, operasyonların tanımı ile gerçek uygulamaları arasında tam bir ayrım yapılmasına olanak tanır.

Arayüz Tanımlama (interface)

interface anahtar kelimesini kullanıyoruz. Bir arayüzde bildirilen tüm yöntemler örtülü olarak public ve abstract şeklindedir (bunu belirtmeye gerek yoktur):

Java
interface Drivable {
    void startEngine();
    void stopEngine();
}

Bir Arayüzü Uygulamak (implements)

Bir sınıf, implements anahtar sözcüğünü kullanarak bir arayüz uygular ve tanımlanan tüm yöntemler için uygulamayı (bir gövdeyle birlikte) sağlaması gerekir:

Java
class Motorcycle implements Drivable {
    @Override
    public void startEngine() {
        System.out.println("Rombo del motore acceso!");
    }

    @Override
    public void stopEngine() {
        System.out.println("Motore spento.");
    }
}

Arayüzlerin Avantajları

  1. Çoklu Kalıtım: Java'da, bir sınıf yalnızca bir ebeveyn sınıfını genişletebilir (tekli miras), ancak aynı anda birden fazla arayüzü uygulayabilir.
    Java
    class HybridCar implements Drivable, Chargeable { ... }
  2. Dekuplaj: Değişkenleri arayüz tipini kullanarak tanımlayabilirsiniz. Bu arayüzü uygulayan herhangi bir nesne, böyle bir değişkene atanabilir.
    Java
    Drivable vehicle = new Motorcycle();
    vehicle.startEngine();

Arayüzlerdeki Sabitler

Arayüzlerde alanları bildirmek mümkündür. Bu değiştiricileri belirtmeseniz bile, bu alanlar örtülü olarak public static final (sınıf sabitleri anlamına gelir) şeklindedir. Sonuç olarak, bildirimden hemen sonra başlatılmaları gerekir:

Java
interface PhysicsConstants {
    double GRAVITY = 9.81; // Implicitly public static final
}

Varsayılan Yöntemler (default)

Java 8'den başlayarak, default anahtar sözcüğünü kullanarak bir arayüz içinde varsayılan uygulamaya sahip yöntemleri tanımlamak mümkündür. Bu yöntemler, uygulayıcı sınıfları bunları geçersiz kılmaya zorlamaz ve bir geri dönüş davranışı sağlar:

Java
interface Logger {
    void log(String message);

    // Default method with a body
    default void logError(String message) {
        log("ERROR: " + message);
    }
}

Kendin dene

Egzersiz#java.m4.l1.e1
Denemeler: 0Yükleniyor…

void fly() yöntemiyle Flyable bir arayüz oluşturun. Daha sonra Flyable'ı uygulayan ve Flying'i ekrana yazdıran bir Bird sınıfı uygulayın.

Düzenleyici yükleniyor…
İpucu göster

Flyable'da "void fly();" yazın. Bird sınıfında, onu `@Override public void fly() { System.out.println('Flying'); ile işaretleyen yöntemi uygulayın. }`.

3 denemeden sonra çözüm mevcut

Egzersiz#java.m4.l1.e2
Denemeler: 0Yükleniyor…

Void Draw() yöntemiyle Drawable bir arayüz tanımlayın. Daha sonra Drawable'ı uygulayan ve Çizim Dikdörtgeni'ni yazdıran bir Rectangle sınıfı uygulayın.

Düzenleyici yükleniyor…
İpucu göster

Arayüzde `void Draw();` tanımını yapın. Dikdörtgen'de, `@Override public void çizimini kullanın() { System.out.println('Drawing Rectangle'); }`.

3 denemeden sonra çözüm mevcut

Egzersiz#java.m4.l1.e3
Denemeler: 0Yükleniyor…

Void swim() yöntemini tanımlayarak Swimmable arayüzünü tamamlayın. Ardından, hem Flyable hem de Swimmable'ı uygulayacak şekilde Duck sınıfını tamamlayın; Flying in the fly() yöntemini ve Yüzme in the swim() yöntemini yazdırın.

Düzenleyici yükleniyor…
İpucu göster

Swimmable'ın içinde `void swim();' değerini bildirin. 'Class Duck, Flyable, Swimmable'ı uygular'ı bildirin ve istenen dizeleri yazdırırken her iki yöntemi de uygulayın.

3 denemeden sonra çözüm mevcut