Menu
Coddy logo textTech

Arayüzleri Uygulama

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

Bir arayüzü kullanmak için, bir sınıfın implements anahtar kelimesini kullanarak onu uygulaması gerekir. Sınıf daha sonra arayüzde tanımlanan tüm metotlar için somut uygulamalar sağlar:

public interface Drawable {
    void draw();
}

public class Circle implements Drawable {
    private double radius;
    
    public Circle(double radius) {
        this.radius = radius;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing a circle with radius " + radius);
    }
}

Eğer bir sınıf bir arayüzü (interface) implement eder ancak tüm metotları için uygulama (implementation) sağlamazsa, derleyici bir hata fırlatacaktır. @Override anotasyonu isteğe bağlıdır ancak hataları yakalamaya yardımcı olduğu için önerilir.

Tıpkı soyut sınıflarda olduğu gibi, bir arayüzü referans türü olarak kullanabilirsiniz. Bu, aynı arayüzü uygulayan farklı sınıfların tek tip olarak ele alınabildiği polimorfizmi mümkün kılar:

Drawable shape1 = new Circle(5.0);
Drawable shape2 = new Rectangle(4.0, 3.0);

shape1.draw();  // 5.0 yarıçaplı bir daire çiziliyor
shape2.draw();  // 4.0 x 3.0 boyutlarında bir dikdörtgen çiziliyor

Bu güçlüdür çünkü Drawable referanslarıyla çalışan kodun belirli sınıf türünü bilmesine gerek yoktur. Sadece nesnenin çizilebilir olmasıyla ilgilenir.

Bir sonraki derste, tek bir sınıfın aynı anda birden fazla arayüzü nasıl uygulayabildiğini göreceksiniz.

challenge icon

Görev

Kolay

Sınıfların arayüzleri (interfaces) nasıl uyguladığını gösteren bir hoparlör sistemi oluşturalım. Herhangi bir hoparlörün neler yapabileceğini tanımlayan bir arayüz oluşturacak, ardından bu sözleşmeyi kendi yöntemleriyle uygulayan iki farklı hoparlör türü inşa edeceksiniz.

Kodunuzu dört dosya halinde düzenleyeceksiniz:

  • Speaker.java: Herhangi bir hoparlörün neler yapabilmesi gerektiğini bildiren Speaker adında bir arayüz tanımlayın. Her hoparlörün bir String döndüren speak() metoduna sahip olması gerekir; bu, tüm uygulayan sınıfların yerine getirmesi gereken sözleşmedir.
  • Human.java: Speaker arayüzünü uygulayan bir sınıf oluşturun. Bir Human'ın bir name alanı (String) vardır. İsmi başlatmak için bir yapıcı (constructor) ekleyin ve speak() metodunu şu değeri döndürecek şekilde uygulayın: [name] says: Hello everyone!
  • Robot.java: Speaker arayüzünü uygulayan başka bir sınıf oluşturun. Bir Robot'un bir model alanı (String) vardır. Modeli başlatmak için bir yapıcı ekleyin ve speak() metodunu şu değeri döndürecek şekilde uygulayın: Robot [model] says: Beep boop!
  • Main.java: Arayüz tabanlı polimorfizm (çok biçimlilik) kullanarak her şeyi bir araya getirin. İki girdi alacaksınız: bir insan ismi ve bir robot modeli. Bir Human ve bir Robot oluşturun, ardından bunları bir Speaker referans dizisinde saklayın. Diziyi döngüye alın ve her hoparlör için speak() metodunu çağırmanın sonucunu yazdırın.

İki girdi alacaksınız: insanın ismi (String) ve robotun modeli (String).

Çıktınız her hoparlör için birer tane olmak üzere iki satır göstermelidir. Tamamen farklı şekillerde konuşsalar bile, hem Human hem de Robot'un Speaker arayüzü aracılığıyla nasıl tek tip olarak ele alınabildiğine dikkat edin!

Kopya kağıdı

Bir sınıf, bir arayüzü uygulamak için implements anahtar kelimesini kullanır ve arayüzde tanımlanan tüm metotlar için somut uygulamalar sağlamalıdır:

public interface Drawable {
    void draw();
}

public class Circle implements Drawable {
    private double radius;
    
    public Circle(double radius) {
        this.radius = radius;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing a circle with radius " + radius);
    }
}

@Override anotasyonu isteğe bağlıdır ancak hataları yakalamaya yardımcı olduğu için önerilir.

Arayüzler referans tipleri olarak kullanılabilir; bu, aynı arayüzü uygulayan farklı sınıfların tek tip olarak ele alınabildiği polimorfizmi (çok biçimlilik) sağlar:

Drawable shape1 = new Circle(5.0);
Drawable shape2 = new Rectangle(4.0, 3.0);

shape1.draw();  // 5.0 yarıçaplı bir daire çiziliyor
shape2.draw();  // 4.0 x 3.0 boyutlarında bir dikdörtgen çiziliyor

Kendin dene

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Girdileri oku
        String humanName = scanner.nextLine();
        String robotModel = scanner.nextLine();
        
        // TODO: Verilen isimle bir Human nesnesi oluşturun
        
        // TODO: Verilen modelle bir Robot nesnesi oluşturun
        
        // TODO: Her iki nesneyi de içeren bir Speaker referans dizisi oluşturun
        
        // TODO: Dizi boyunca döngü kurun ve her bir speaker için speak() sonucunu yazdırın
    }
}
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