Menu
Coddy logo textTech

Çoklu Arayüz Uygulama

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

Yalnızca tek bir class extend edebildiğiniz class inheritance'ın aksine, Java bir class'ın birden fazla interface implement etmesine izin verir. Java, çoklu kalıtımın bir biçimini bu şekilde güvenli bir şekilde gerçekleştirir.

Birden fazla arayüzü uygulamak için, bunları implements anahtar kelimesinden sonra virgülle ayırarak listeleyin:

public interface Drawable {
    void draw();
}

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

public class Rectangle implements Drawable, Resizable {
    private int width, height;
    
    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing rectangle " + width + "x" + height);
    }
    
    @Override
    public void resize(int width, int height) {
        this.width = width;
        this.height = height;
    }
}

Sınıf, bildirdiği her arayüzdeki tüm metotları uygulamalıdır. Kalıtımı birden fazla arayüzle de birleştirebilirsiniz:

public class Square extends Shape implements Drawable, Resizable {
    // Her iki arayüzden gelen metotları uygulamalıdır
    // Shape sınıfından miras alınan üyeleri de kullanabilir
}

Bu esneklik, birden fazla rolü yerine getiren sınıflar tasarlamanıza olanak tanır. Bir SmartPhone; her biri telefonun desteklediği farklı yetenekleri tanımlayan Callable, Messageable ve Browsable arayüzlerini uygulayabilir.

challenge icon

Görev

Kolay

Cihazların birden fazla yeteneğe sahip olabildiği akıllı bir cihaz sistemi kuralım. Hem açılıp kapanabilen hem de ses seviyesi kontrol edilebilen bir SmartTV oluşturacaksınız; bu, tek bir sınıfın farklı rolleri yerine getirmek için birden fazla arayüzü (interface) nasıl uygulayabileceğini gösterecektir.

Kodunuzu dört dosya halinde düzenleyeceksiniz:

  • Powerable.java: Güç verilebilen cihazlar için bir arayüz tanımlayın. Her ikisi de void döndüren iki metot bildirmelidir: powerOn() ve powerOff().
  • VolumeControl.java: Ses kontrolü olan cihazlar için bir arayüz tanımlayın. Void döndüren bir setVolume(int level) metodu ve int döndüren bir getVolume() metodu bildirmelidir.
  • SmartTV.java: Hem Powerable hem de VolumeControl arayüzlerini uygulayan bir sınıf oluşturun. SmartTV'niz bir brand alanına (String), bir isOn alanına (boolean, başlangıçta false) ve bir volume alanına (int, başlangıçta 0) sahip olmalıdır. Marka adını alan bir yapıcı (constructor) ekleyin. Gerekli tüm metotları uygulayın:
    • powerOn() metodu isOn değerini true yapmalı ve şunu yazdırmalıdır: [brand] TV is now ON
    • powerOff() metodu isOn değerini false yapmalı ve şunu yazdırmalıdır: [brand] TV is now OFF
    • setVolume(int level) metodu ses seviyesini güncellemeli ve şunu yazdırmalıdır: [brand] TV volume set to [level]
    • getVolume() metodu mevcut ses seviyesini döndürmelidir
  • Main.java: Çoklu arayüz uygulamasını göstermek için her şeyi bir araya getirin. İki girdi alacaksınız: bir marka adı (String) ve bir ses seviyesi (int). Verilen marka ile bir SmartTV oluşturun, ardından:
    • powerOn() metodunu çağırın
    • Verilen seviye ile setVolume() metodunu çağırın
    • getVolume() kullanarak şunu yazdırın: Current volume: [volume]
    • powerOff() metodunu çağırın

İki girdi alacaksınız: TV markası (String) ve ses seviyesi (int).

Çıktınız, SmartTV'nizin her iki arayüz sözleşmesini de nasıl yerine getirdiğini gösteren dört satır olmalıdır; herhangi bir Powerable cihaz gibi güç verilebilir ve herhangi bir VolumeControl cihazı gibi ses seviyesi kontrol edilebilir!

Kopya kağıdı

Bir sınıf, implements anahtar kelimesinden sonra virgülle ayırarak listeleyerek birden fazla arayüzü uygulayabilir:

public class Rectangle implements Drawable, Resizable {
    // Her iki arayüzdeki tüm metotları uygulamalıdır
}

Sınıf, bildirdiği her arayüzdeki tüm metotları uygulamalıdır.

Sınıf kalıtımını birden fazla arayüz uygulamasıyla da birleştirebilirsiniz:

public class Square extends Shape implements Drawable, Resizable {
    // Her iki arayüzdeki metotları uygular
    // Shape sınıfından kalıtım yoluyla alınan üyeleri kullanabilir
}

Bu, bir sınıfın birden fazla rolü yerine getirmesine ve farklı yeteneklere sahip olmasına olanak tanır.

Kendin dene

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Girdileri oku
        String brand = scanner.nextLine();
        int volumeLevel = scanner.nextInt();
        
        // TODO: Verilen marka ile bir SmartTV oluşturun
        
        // TODO: powerOn() metodunu çağırın
        
        // TODO: Verilen seviye ile setVolume() metodunu çağırın
        
        // TODO: getVolume() kullanarak şunu yazdırın: Current volume: [volume]
        
        // TODO: powerOff() metodunu çağı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