İçeriğe geç

Interface

Interface, Java’da sınıflar için bir şablon (contract) görevi görür.
Bir sınıfın hangi metotları uygulamak (implement etmek) zorunda olduğunu belirtir.

💡 Interface’ler, çoklu kalıtımı (multiple inheritance) dolaylı olarak sağlar.


public interface Hayvan {
void sesCikar();
void hareketEt();
}

Interface içinde tanımlanan metotlar abstract (gövdesiz) ve public olarak kabul edilir.


class Kedi implements Hayvan {
public void sesCikar() {
System.out.println("Miyav!");
}
public void hareketEt() {
System.out.println("Kedi yürüyor.");
}
}

Bir sınıf, bir interface’i implements anahtar kelimesi ile uygular.


🔹 4. Birden Fazla Interface Kullanımı

Section titled “🔹 4. Birden Fazla Interface Kullanımı”

Java’da bir sınıf birden fazla interface implement edebilir.

interface Ucan {
void uc();
}
interface Yuzucu {
void yuz();
}
class Ordek implements Ucan, Yuzucu {
public void uc() { System.out.println("Ördek uçuyor."); }
public void yuz() { System.out.println("Ördek yüzüyor."); }
}

✅ Java sınıflar sadece bir sınıfı extends, ama birden fazla interface’i implements edebilir.


🔹 5. Interface ile Sabitler (Constants)

Section titled “🔹 5. Interface ile Sabitler (Constants)”

Interface içinde değişkenler otomatik olarak public static final olarak tanımlanır.

interface Bilgi {
int MAX_SAYI = 100; // public static final
}
System.out.println(Bilgi.MAX_SAYI);

💡 Interface değişkenleri değiştirilemez (constant).


🔹 6. Default ve Static Metotlar (Java 8+)

Section titled “🔹 6. Default ve Static Metotlar (Java 8+)”

Java 8 ile birlikte interface’ler gövdeli metotlara sahip olabilir.

interface Arac {
default void calistir() {
System.out.println("Araç çalıştı.");
}
}
interface Arac {
static void bilgi() {
System.out.println("Bu bir araç arayüzüdür.");
}
}
Arac.bilgi(); // static metot
new Otomobil().calistir(); // default metot

Bir interface, başka bir interface’den miras alabilir (extends).

interface Hayvan {
void sesCikar();
}
interface Memeli extends Hayvan {
void sutVer();
}

💡 Bir interface başka bir interface’den extends alır, sınıflar ise implements eder.


🔹 8. Örnek: Çoklu Interface Kullanımı

Section titled “🔹 8. Örnek: Çoklu Interface Kullanımı”
interface Telefon {
void aramaYap();
}
interface Kamera {
void fotoCek();
}
class AkilliTelefon implements Telefon, Kamera {
public void aramaYap() {
System.out.println("Arama yapılıyor...");
}
public void fotoCek() {
System.out.println("Fotoğraf çekiliyor...");
}
}
public class Main {
public static void main(String[] args) {
AkilliTelefon tel = new AkilliTelefon();
tel.aramaYap();
tel.fotoCek();
}
}

📱 Akıllı telefon hem Telefon hem de Kamera işlevlerini yerine getirmiştir.


🔹 9. Polymorphism (Çok Biçimlilik) ile Interface Kullanımı

Section titled “🔹 9. Polymorphism (Çok Biçimlilik) ile Interface Kullanımı”
Hayvan h = new Kedi();
h.sesCikar(); // Kedi’nin metodu çağrılır

Interface referansı, implement eden sınıf nesnesini gösterebilir.


🔹 10. Interface ile Abstract Class Farkı

Section titled “🔹 10. Interface ile Abstract Class Farkı”
ÖzellikInterfaceAbstract Class
Anahtar kelimeinterfaceabstract class
Gövdeli metotJava 8 öncesi ❌, sonrası ✅ (default)
Çoklu kalıtım✅ (birden fazla interface)
Alan (field)public static finalDeğişken tanımlanabilir
AmaçDavranış tanımlamaOrtak yapı tanımlama

interface Odeme {
void odemeYap(double miktar);
}
class KrediKarti implements Odeme {
public void odemeYap(double miktar) {
System.out.println("Kredi kartı ile ödeme: " + miktar + " TL");
}
}
class Nakit implements Odeme {
public void odemeYap(double miktar) {
System.out.println("Nakit ödeme: " + miktar + " TL");
}
}
public class Main {
public static void main(String[] args) {
Odeme odeme1 = new KrediKarti();
Odeme odeme2 = new Nakit();
odeme1.odemeYap(250.0);
odeme2.odemeYap(100.0);
}
}

💳 Odeme interface’i, farklı ödeme yöntemlerinin ortak davranışını tanımlar.


KavramAçıklamaÖrnek
interfaceSınıflar için davranış tanımıinterface Hayvan { void sesCikar(); }
implementsInterface uygulamaclass Kedi implements Hayvan
defaultGövdeli metot (Java 8+)default void bilgi()
staticInterface’e özel metotArac.bilgi()
Çoklu inheritanceBir sınıf birden fazla interface implement edebilirimplements A, B

💡 Not: Interface’ler, soyutlamayı (abstraction) sağlar ve Java’da çoklu kalıtımın güvenli bir yoludur.