Ç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.
Görev
KolayCihazları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()vepowerOff().VolumeControl.java: Ses kontrolü olan cihazlar için bir arayüz tanımlayın. Void döndüren birsetVolume(int level)metodu ve int döndüren birgetVolume()metodu bildirmelidir.SmartTV.java: HemPowerablehem deVolumeControlarayüzlerini uygulayan bir sınıf oluşturun. SmartTV'niz birbrandalanına (String), birisOnalanına (boolean, başlangıçta false) ve birvolumealanı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()metoduisOndeğerini true yapmalı ve şunu yazdırmalıdır:[brand] TV is now ONpowerOff()metoduisOndeğerini false yapmalı ve şunu yazdırmalıdır:[brand] TV is now OFFsetVolume(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
}
}
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
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici Kalıbı