Menu
Coddy logo textTech

Arayüzlere Giriş

Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 34 / 87.

Alt sınıfların uyması gereken sözleşmeleri soyut sınıfların nasıl tanımladığını gördün. Peki bir sınıfın birden fazla sözleşmeye uymasını istiyorsan ne olacak? Java, bir sınıfın birden fazla sınıfı genişletmesine izin vermez, ancak bu sorunu arayüzlerle çözer.

Bir arayüz, bir sınıfın bunu nasıl yaptığını belirtmeden neler yapabileceğini tanımlayan bir sözleşmedir. Soyut sınıfların aksine, arayüzler yalnızca (varsayılan olarak) hiçbir uygulama içermeyen metot imzalarını içerir:

public interface Drawable {
    void draw();
}

public interface Resizable {
    void resize(int width, int height);
}

Bir arayüzü bir söz olarak düşün. Bir sınıf bir arayüzü uyguladığında, o arayüzde bildirilen tüm yöntemlerin uygulamalarını sağlamayı vaat eder. Arayüz yeteneği tanımlar, sınıf ise davranışı sağlar.

Arayüzler, class yerine interface anahtar sözcüğü kullanılarak bildirilir. Bir arayüzdeki tüm yöntemler örtük olarak public ve abstract olduğundan, bu anahtar sözcükleri yazmanız gerekmez:

public interface Playable {
    void play();    // örtük olarak public abstract
    void pause();
    void stop();
}

Arayüzler, örtük olarak public static final olan sabitleri de bildirebilir:

public interface GameConstants {
    int MAX_PLAYERS = 4;  // örtük olarak public static final
}

Sonraki derste sınıfların, implements anahtar sözcüğünü kullanarak arabirimleri nasıl uyguladığını öğreneceksin.

challenge icon

Görev

Kolay

Farklı cihazların neler yapabileceğini açıklayan arayüzler tanımlayarak bir cihaz kontrol sistemi oluşturalım. Bu görev, nasıl çalıştıklarını belirtmeden yetenekleri tanımlayan sözleşmeler olan arayüzler oluşturmaya odaklanır.

Kodunuzu üç dosyaya ayıracaksınız:

  • Switchable.java: Bir cihazın açılıp kapanabilir olmasının ne anlama geldiğini tanımlayan bir arayüz oluşturun. Açılıp kapanabilen herhangi bir cihaz açılabilmeli ve kapanabilmelidir. İki metot bildirin: turnOn() ve turnOff(). Unutmayın, arayüz metotları örtük olarak public ve abstract olduğundan yalnızca metot imzalarını yazmanız yeterlidir.
  • Adjustable.java: Bir cihazın ayarlanabilir olmasının ne anlama geldiğini tanımlayan başka bir arayüz oluşturun. Ayarlanabilir bir cihaz seviyesini ayarlayabilmelidir. setLevel(int level) metodunu bildirin. Ayrıca değeri MAX_LEVEL olan 100 sabitini ekleyin: arayüzlerdeki sabitlerin örtük olarak public static final olduğunu unutmayın.
  • Main.java: Bilgilerini yazdırarak arayüzlerinizin doğru şekilde tanımlandığını gösterin. Bir girdi alacaksınız: bir seviye değeri (int). Aşağıdaki üç satırı yazdırın:
    • Switchable methods: turnOn, turnOff
    • Adjustable methods: setLevel
    • Max level constant: [MAX_LEVEL value] (sabite Adjustable arayüzünden erişin)
    Ardından şunu yazdırın: Setting level to: [input level]

Bir girdi alacaksınız: bir seviye değeri (int).

Bu görev yalnızca yetenekleri açıklayan taslaklar olan arayüzleri tanımlamaya odaklanır. Bir sonraki derste, sınıfların gerçek davranışı sağlamak için bu arayüzleri nasıl uyguladığını öğreneceksiniz!

Kendin dene

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int level = scanner.nextInt();
        
        // TODO: Arayüzler hakkında bilgileri yazdır
        // Print: "Switchable methods: turnOn, turnOff"
        // Print: "Adjustable methods: setLevel"
        // Print: "Max level constant: " followed by Adjustable.MAX_LEVEL
        // Print: "Setting level to: " followed by the input level
        
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Java derleyicisi