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.

Soyut sınıfların, alt sınıfların uyması gereken sözleşmeleri nasıl tanımladığını gördünüz. Peki ya bir sınıfın birden fazla sözleşmeye uymasını isterseniz? Java, bir sınıfın birden fazla sınıfı genişletmesine izin vermez, ancak bu sorunu arayüzler ile çözer.

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

public interface Drawable {
    void draw();
}

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

Bir arayüzü (interface) bir söz olarak düşünün. Bir sınıf bir arayüzü uyguladığında (implements), o arayüzde bildirilen tüm metotlar için uygulama sağlamayı vaat eder. Arayüz yeteneği tanımlar ve sınıf ise davranışı sağlar.

Arayüzler, class yerine interface anahtar kelimesi kullanılarak bildirilir. Bir arayüzdeki tüm metotlar örtük olarak public ve abstract'tır, bu nedenle bu anahtar kelimeleri yazmanıza gerek yoktur:

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

Arayüzler ayrıca, örtük olarak public static final olan sabitler de bildirebilirler:

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

Bir sonraki derste, sınıfların implements anahtar kelimesini kullanarak arayüzleri nasıl uyguladığını öğreneceksiniz.

challenge icon

Görev

Kolay

Farklı cihazların neler yapabileceğini tanımlayan arayüzler (interfaces) oluşturarak bir cihaz kontrol sistemi kuralım. Bu meydan okuma, yeteneklerin nasıl çalıştığını belirtmeden onları tanımlayan sözleşmeler olan arayüzleri oluşturmaya odaklanmaktadır.

Kodunuzu üç dosya halinde düzenleyeceksiniz:

  • Switchable.java: Bir cihazın açılıp kapanabilir (switchable) olmasının ne anlama geldiğini tanımlayan bir arayüz oluşturun. Herhangi bir açılıp kapanabilir cihaz, açılabilmeli ve kapanabilmelidir. İki metot bildirin: turnOn() ve turnOff(). Unutmayın, arayüz metotları örtük olarak public ve abstract'tır, bu nedenle sadece metot imzalarına ihtiyacınız vardır.
  • Adjustable.java: Bir cihazın ayarlanabilir (adjustable) olmasının ne anlama geldiğini tanımlayan başka bir arayüz oluşturun. Ayarlanabilir bir cihaz, seviyesini ayarlayabilmelidir. setLevel(int level) adında bir metot bildirin. Ayrıca 100 değerine sahip bir MAX_LEVEL sabiti ekleyin; arayüzlerdeki sabitlerin örtük olarak public static final olduğunu unutmayın.
  • Main.java: Arayüzleriniz hakkında bilgi yazdırarak bunların düzgün 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: " + Adjustable.MAX_LEVEL (sabite Adjustable arayüzünden erişin)
    Ardından şunu yazdırın: "Setting level to: " + level

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

Bu meydan okuma tamamen yetenekleri tanımlayan taslaklar olan arayüzleri tanımlamaya odaklanmaktadır. Bir sonraki derste, sınıfların gerçek davranışı sağlamak için bu arayüzleri nasıl uyguladığını (implement) öğreneceksiniz!

Kopya kağıdı

Bir arayüz (interface), bir sınıfın ne yapabileceğini, bunu nasıl yapacağını belirtmeden tanımlayan bir sözleşmedir. Arayüzler, uygulama (implementation) içermeyen yalnızca metot imzalarını barındırır.

Arayüzler, interface anahtar kelimesi kullanılarak bildirilir:

public interface Drawable {
    void draw();
}

Bir arayüzdeki tüm metotlar örtük olarak public ve abstract'tır:

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

Arayüzler, örtük olarak public static final olan sabitler tanımlayabilir:

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

Bir sınıf, birden fazla sınıfı genişletmenin (extending) aksine, birden fazla arayüzü uygulayabilir (implement).

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 bilgi yazdırın
        // Yazdır: "Switchable methods: turnOn, turnOff"
        // Yazdır: "Adjustable methods: setLevel"
        // Yazdır: "Max level constant: " ardından Adjustable.MAX_LEVEL
        // Yazdır: "Setting level to: " ardından giriş seviyesi
        
    }
}
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