Arayüzlere Giriş
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 34 / 87.
Alt sınıfların uyması gereken sözleşmeleri soyut sınıfların nasıl tanımladığını gördün. Peki bir sınıfın birden fazla sözleşmeye uymasını istiyorsan ne olacak? Java, bir sınıfın birden fazla sınıfı genişletmesine izin vermez, ancak bu sorunu arayüzlerle çözer.
Bir arayüz, bir sınıfın bunu nasıl yaptığını belirtmeden neler yapabileceğini tanımlayan bir sözleşmedir. Soyut sınıfların aksine, arayüzler yalnızca (varsayılan olarak) hiçbir uygulama içermeyen metot imzalarını içerir:
public interface Drawable {
void draw();
}
public interface Resizable {
void resize(int width, int height);
}Bir arayüzü bir söz olarak düşün. Bir sınıf bir arayüzü uyguladığında, o arayüzde bildirilen tüm yöntemlerin uygulamalarını sağlamayı vaat eder. Arayüz yeteneği tanımlar, sınıf ise davranışı sağlar.
Arayüzler, class yerine interface anahtar sözcüğü kullanılarak bildirilir. Bir arayüzdeki tüm yöntemler örtük olarak public ve abstract olduğundan, bu anahtar sözcükleri yazmanız gerekmez:
public interface Playable {
void play(); // örtük olarak public abstract
void pause();
void stop();
}Arayüzler, örtük olarak public static final olan sabitleri de bildirebilir:
public interface GameConstants {
int MAX_PLAYERS = 4; // örtük olarak public static final
}Sonraki derste sınıfların, implements anahtar sözcüğünü kullanarak arabirimleri nasıl uyguladığını öğreneceksin.
Görev
KolayFarklı cihazların neler yapabileceğini açıklayan arayüzler tanımlayarak bir cihaz kontrol sistemi oluşturalım. Bu görev, nasıl çalıştıklarını belirtmeden yetenekleri tanımlayan sözleşmeler olan arayüzler oluşturmaya odaklanır.
Kodunuzu üç dosyaya ayıracaksınız:
Switchable.java: Bir cihazın açılıp kapanabilir olmasının ne anlama geldiğini tanımlayan bir arayüz oluşturun. Açılıp kapanabilen herhangi bir cihaz açılabilmeli ve kapanabilmelidir. İki metot bildirin:turnOn()veturnOff(). Unutmayın, arayüz metotları örtük olarak public ve abstract olduğundan yalnızca metot imzalarını yazmanız yeterlidir.Adjustable.java: Bir cihazın ayarlanabilir olmasının ne anlama geldiğini tanımlayan başka bir arayüz oluşturun. Ayarlanabilir bir cihaz seviyesini ayarlayabilmelidir.setLevel(int level)metodunu bildirin. Ayrıca değeriMAX_LEVELolan100sabitini ekleyin: arayüzlerdeki sabitlerin örtük olarakpublic static finalolduğunu unutmayın.Main.java: Bilgilerini yazdırarak arayüzlerinizin doğru şekilde tanımlandığını gösterin. Bir girdi alacaksınız: bir seviye değeri (int). Aşağıdaki üç satırı yazdırın:Switchable methods: turnOn, turnOffAdjustable methods: setLevelMax level constant: [MAX_LEVEL value](sabite Adjustable arayüzünden erişin)
Setting level to: [input level]
Bir girdi alacaksınız: bir seviye değeri (int).
Bu görev yalnızca yetenekleri açıklayan taslaklar olan arayüzleri tanımlamaya odaklanır. Bir sonraki derste, sınıfların gerçek davranışı sağlamak için bu arayüzleri nasıl uyguladığını öğreneceksiniz!
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int level = scanner.nextInt();
// TODO: Arayüzler hakkında bilgileri yazdır
// Print: "Switchable methods: turnOn, turnOff"
// Print: "Adjustable methods: setLevel"
// Print: "Max level constant: " followed by Adjustable.MAX_LEVEL
// Print: "Setting level to: " followed by the input level
}
}
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