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, implements anahtar sözcüğünü kullanarak onu uygulamalıdır. Sınıf daha sonra arayüzde bildirilen tüm yöntemler 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);
    }
}

Bir sınıf bir interface uyguluyor ancak tüm method’ları için uygulama sağlamıyorsa derleyici bir hata verir. @Override açıklaması 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ü başvuru türü olarak kullanabilirsiniz. Bu, aynı arayüzü uygulayan farklı sınıfların tekdüze bir şekilde 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();  // Yarıçapı 5.0 olan 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. Yalnızca nesnenin çizilebilmesini önemser.

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

challenge icon

Görev

Kolay

Arayüzlerin sınıflar tarafından nasıl uygulandığı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ü geliştireceksin.

Kodunu dört dosyaya ayıracaksın:

  • Speaker.java: Herhangi bir hoparlörün yapabilmesi gerekenleri bildiren Speaker adlı bir arayüz tanımla. Her hoparlörün bir String döndüren speak() metoduna sahip olması gerekir. Bu, uygulayan tüm sınıfların yerine getirmesi gereken sözleşmedir.
  • Human.java: Speaker arayüzünü uygulayan bir sınıf oluştur. Bir Human nesnesinin bir name alanı (String) vardır. name değerini başlatmak için bir kurucu ekle ve speak() metodunu şu değeri döndürecek şekilde uygula: [name] says: Hello everyone!
  • Robot.java: Speaker arayüzünü uygulayan başka bir sınıf oluştur. Bir Robot nesnesinin bir model alanı (String) vardır. model değerini başlatmak için bir kurucu ekle ve speak() metodunu şu değeri döndürecek şekilde uygula: Robot [model] says: Beep boop!
  • Main.java: Arayüz tabanlı çok biçimlilik kullanarak her şeyi bir araya getir. İki girdi alacaksın: bir insan adı ve bir robot modeli. Bir Human ve bir Robot oluştur, ardından bunları Speaker referanslarından oluşan bir dizide sakla. Dizi üzerinde döngü kur ve her hoparlör için speak() çağrısının sonucunu yazdır.

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

Çıktın iki satır göstermelidir: her hoparlör için bir satır. Tamamen farklı şekillerde konuşmalarına rağmen hem Human hem de Robot nesnelerinin Speaker arayüzü üzerinden nasıl aynı şekilde ele alınabildiğine dikkat et!

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ştur
        
        // TODO: Verilen modelle bir Robot nesnesi oluştur
        
        // TODO: Her iki nesneyi içeren Speaker referanslarından bir dizi oluştur
        
        // TODO: Diziyi döngüye al ve her speaker için speak() sonucunu yazdır
    }
}
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