Ç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 bir sınıfı genişletebildiğiniz sınıf kalıtımının aksine, Java bir sınıfın birden fazla arayüzü uygulamasına izin verir. Java, çoklu kalıtımın bir biçimini güvenli bir şekilde bu şekilde gerçekleştirir.
Birden fazla arayüzü uygulamak için bunları implements anahtar sözcüğünden sonra virgüllerle 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 yöntemleri uygulamalıdır. Kalıtımı birden çok arayüzle de birleştirebilirsiniz:
public class Square extends Shape implements Drawable, Resizable {
// Her iki arayüzden de metotları uygulamalı
// Shape'den miras alınan üyeleri de kullanabilir
}Bu esneklik, birden fazla rolü yerine getiren sınıflar tasarlamanı sağlar. Bir SmartPhone, 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 oluşturalım. Hem açılıp/kapatılabilen hem de ses düzeyi kontrol edilebilen bir SmartTV oluşturacaksın: böylece tek bir sınıfın farklı rolleri yerine getirmek için birden fazla arayüzü nasıl uygulayabildiğini göstereceksin.
Kodunu dört dosyaya ayıracaksın:
Powerable.java: Gücü açılıp kapatılabilen cihazlar için bir arayüz tanımla. Her ikisi de void döndüren iki yöntem tanımlamalıdır:powerOn()vepowerOff().VolumeControl.java: Ses düzeyi kontrolüne sahip cihazlar için bir arayüz tanımla. void döndürensetVolume(int level)yöntemini ve int döndürengetVolume()yöntemini tanımlamalıdır.SmartTV.java: HemPowerablehem deVolumeControlarayüzlerini uygulayan bir sınıf oluştur. SmartTV sınıfın birbrandalanına (String), başlangıçta false olan birisOnalanına (boolean) ve başlangıçta 0 olan birvolumealanına (int) sahip olmalıdır. Marka adını alan bir kurucu ekle. Gerekli tüm yöntemleri uygula:powerOn(),isOndeğerini true olarak ayarlamalı ve şunu yazdırmalıdır:[brand] TV is now ONpowerOff(),isOndeğerini false olarak ayarlamalı ve şunu yazdırmalıdır:[brand] TV is now OFFsetVolume(int level), ses düzeyini güncellemeli ve şunu yazdırmalıdır:[brand] TV volume set to [level]getVolume(), geçerli ses düzeyini döndürmelidir
Main.java: Birden fazla arayüz uygulamasını göstermek için her şeyi bir araya getir. İki girdi alacaksın: bir marka adı (String) ve bir ses düzeyi (int). Verilen marka ile bir SmartTV oluştur, ardından:powerOn()yöntemini çağır- Verilen düzey ile
setVolume()yöntemini çağır getVolume()kullanarak şunu yazdır:Current volume: [volume]powerOff()yöntemini çağır
İki girdi alacaksın: TV markası (String) ve ses düzeyi (int).
Çıktın, SmartTV sınıfının her iki arayüz sözleşmesini nasıl yerine getirdiğini gösteren dört satır içermelidir. Herhangi bir Powerable cihaz gibi açılabilir ve herhangi bir VolumeControl cihazı gibi ses düzeyi kontrol edilebilir!
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ştur
// TODO: powerOn() çağır
// TODO: Verilen seviye ile setVolume() çağır
// TODO: Print: Current volume: [volume] using getVolume()
// TODO: powerOff() çağır
}
}
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ıKendi başına pratik yap: Online Java derleyicisi