-
Sadrazamv4
instagram:sadrazam.spy Tg:Sadrazamv4
🚀 BAŞTAN SONA JAVA DİLİ BÖLÜM-10: Polymorphism (Çok Biçimlilik) ve Dinamik Bağlama 🎭
Selamlar! Serimizin 10. bölümüne hoş geldiniz.
Önceki bölümde Inheritance (Kalıtım) yapısını, `extends` ve `super` kelimelerini, ayrıca Method Overriding kavramını incelemiştik. Bu bölümde ise OOP’nin üçüncü ana temeli olan **Polymorphism (Çok Biçimlilik)** ilkesini, **Upcasting / Downcasting** işlemlerini ve **`instanceof`** operatörünü detaylarıyla öğreneceğiz.
---
📌 1. Polymorphism (Çok Biçimlilik) Nedir? 🎭
Polymorphism; bir nesnenin veya metodun **birden farklı biçimde** davranabilme yeteneğidir.
Gerçek hayattan bir örnek vermek gerekirse: Bir şirket çalışanına "İşini Yap" talimatı verdiğinizde;
• Bir *Yazılımcı* kod yazar,
• Bir *Tasarımcı* arayüz çizer,
• Bir *Muhasebeci* fatura keser.
Tek bir komut ("İşini Yap"), nesnenin gerçek tipine göre farklı çıktılar üretir. İşte bu Polymorphism'dir!
---
🏗️ 2. Upcasting (Üst Tipe Dönüştürme) ⬆️
Java'da **üst sınıf referansı (superclass reference)**, alt sınıflardan (subclass) türetilmiş herhangi bir nesneyi tutabilir. Buna **Upcasting** denir ve otomatik olarak gerçekleşir.
Sözdizimi: `UstSinif referans = new AltSinif();`
### Örnek Sınıf Hiyerarşisi (`Hayvan.java`, `Kopek.java`, `Kedi.java`):
class Hayvan {
public void sesCikar() {
System.out.println("Hayvan bir ses çıkarıyor...");
}
}
class Kopek extends Hayvan {
@Override
public void sesCikar() {
System.out.println("Köpek: Hav hav! 🐕");
}
public void topGetir() {
System.out.println("Köpek topu getirdi!");
}
}
class Kedi extends Hayvan {
@Override
public void sesCikar() {
System.out.println("Kedi: Miyav! 🐈");
}
}
### Polymorphism ve Upcasting Kullanımı (`Main.java`):
public class Main {
public static void sesEttir(Hayvan h) {
// Hangi hayvan nesnesi gelirse gelsin, kendi ezilmiş (overridden) metodu çalışır!
h.sesCikar();
}
public static void main(String[] args) {
// Upcasting: Hayvan referansı Kopek ve Kedi nesnesi tutuyor
Hayvan h1 = new Kopek();
Hayvan h2 = new Kedi();
// Dinamik Metot Bağlama (Dynamic Method Binding)
h1.sesCikar(); // Çıktı: Köpek: Hav hav! 🐕
h2.sesCikar(); // Çıktı: Kedi: Miyav! 🐈
System.out.println("-------------------------");
// Metot parametresi olarak Polymorphism kullanımı:
sesEttir(new Kopek());
sesEttir(new Kedi());
}
}
---
🔄 3. Downcasting ve `instanceof` Operatörü ⬇️
Üst sınıf referansı ile tutulan bir nesne üzerinden yalnızca üst sınıfta tanımlı metotlara erişilebilir. Alt sınıfa özel olan metotları (örneğin `Kopek` sınıfındaki `topGetir()`) çağırabilmek için referansı tekrar alt sınıfa dönüştürmemiz gerekir. Buna **Downcasting** denir.
⚠️ **Tehlike:** Yanlış tipe downcasting yapmak runtime'da `ClassCastException` hatası fırlatır! Bu hatayı önlemek için dönüşüm öncesi **`instanceof`** operatörü kullanılır.
### Güvenli Downcasting Örneği:
public class Main {
public static void oyunuBaslat(Hayvan h) {
h.sesCikar();
// Nesnenin gerçekten Kopek olup olmadığını kontrol ediyoruz
if (h instanceof Kopek) {
Kopek k = (Kopek) h; // Güvenli Downcasting
k.topGetir();
} else {
System.out.println("Bu hayvan top getiremez!");
}
}
public static void main(String[] args) {
Hayvan k = new Kopek();
Hayvan c = new Kedi();
oyunuBaslat(k);
System.out.println();
oyunuBaslat(c);
}
}
---
🚀 4. Modern Java Pattern Matching for `instanceof` (Java 16+) 🌟
Java 16 ile birlikte `instanceof` kontrolü ve cast işlemini tek satırda yapmamızı sağlayan harika bir özellik gelmiştir:
public class Main {
public static void hayvanIslem(Hayvan h) {
// Pattern Matching: Doğrudan 'k' adında Kopek değişkenine atanır!
if (h instanceof Kopek k) {
k.topGetir();
}
}
}
---
📝 Bölüm Özeti ve Gelecek Bölüm 🔮
Bu bölümde Polymorphism felsefesini, Upcasting ve Downcasting kavramlarını, `instanceof` kontrolünü ve modern Pattern Matching yapısını öğrendik.
👉 **Bölüm 11'de Bizi Ne Bekliyor?**
• OOP'nin Dördüncü Ana Temeli: **Abstraction (Soyutlama)** 🎨
• Soyut Sınıflar (**Abstract Classes**) ve `abstract` Metotlar
• Arayüzler (**Interfaces**) ve `implements` Kull
anımı
• Abstract Class vs Interface Karşılaştırması
Sorularınızı konu altından iletebilirsiniz. Bir sonraki bölümde görüşmek üzere! ☕✨
Selamlar! Serimizin 10. bölümüne hoş geldiniz.
Önceki bölümde Inheritance (Kalıtım) yapısını, `extends` ve `super` kelimelerini, ayrıca Method Overriding kavramını incelemiştik. Bu bölümde ise OOP’nin üçüncü ana temeli olan **Polymorphism (Çok Biçimlilik)** ilkesini, **Upcasting / Downcasting** işlemlerini ve **`instanceof`** operatörünü detaylarıyla öğreneceğiz.
---
📌 1. Polymorphism (Çok Biçimlilik) Nedir? 🎭
Polymorphism; bir nesnenin veya metodun **birden farklı biçimde** davranabilme yeteneğidir.
Gerçek hayattan bir örnek vermek gerekirse: Bir şirket çalışanına "İşini Yap" talimatı verdiğinizde;
• Bir *Yazılımcı* kod yazar,
• Bir *Tasarımcı* arayüz çizer,
• Bir *Muhasebeci* fatura keser.
Tek bir komut ("İşini Yap"), nesnenin gerçek tipine göre farklı çıktılar üretir. İşte bu Polymorphism'dir!
---
🏗️ 2. Upcasting (Üst Tipe Dönüştürme) ⬆️
Java'da **üst sınıf referansı (superclass reference)**, alt sınıflardan (subclass) türetilmiş herhangi bir nesneyi tutabilir. Buna **Upcasting** denir ve otomatik olarak gerçekleşir.
Sözdizimi: `UstSinif referans = new AltSinif();`
### Örnek Sınıf Hiyerarşisi (`Hayvan.java`, `Kopek.java`, `Kedi.java`):
class Hayvan {
public void sesCikar() {
System.out.println("Hayvan bir ses çıkarıyor...");
}
}
class Kopek extends Hayvan {
@Override
public void sesCikar() {
System.out.println("Köpek: Hav hav! 🐕");
}
public void topGetir() {
System.out.println("Köpek topu getirdi!");
}
}
class Kedi extends Hayvan {
@Override
public void sesCikar() {
System.out.println("Kedi: Miyav! 🐈");
}
}
### Polymorphism ve Upcasting Kullanımı (`Main.java`):
public class Main {
public static void sesEttir(Hayvan h) {
// Hangi hayvan nesnesi gelirse gelsin, kendi ezilmiş (overridden) metodu çalışır!
h.sesCikar();
}
public static void main(String[] args) {
// Upcasting: Hayvan referansı Kopek ve Kedi nesnesi tutuyor
Hayvan h1 = new Kopek();
Hayvan h2 = new Kedi();
// Dinamik Metot Bağlama (Dynamic Method Binding)
h1.sesCikar(); // Çıktı: Köpek: Hav hav! 🐕
h2.sesCikar(); // Çıktı: Kedi: Miyav! 🐈
System.out.println("-------------------------");
// Metot parametresi olarak Polymorphism kullanımı:
sesEttir(new Kopek());
sesEttir(new Kedi());
}
}
---
🔄 3. Downcasting ve `instanceof` Operatörü ⬇️
Üst sınıf referansı ile tutulan bir nesne üzerinden yalnızca üst sınıfta tanımlı metotlara erişilebilir. Alt sınıfa özel olan metotları (örneğin `Kopek` sınıfındaki `topGetir()`) çağırabilmek için referansı tekrar alt sınıfa dönüştürmemiz gerekir. Buna **Downcasting** denir.
⚠️ **Tehlike:** Yanlış tipe downcasting yapmak runtime'da `ClassCastException` hatası fırlatır! Bu hatayı önlemek için dönüşüm öncesi **`instanceof`** operatörü kullanılır.
### Güvenli Downcasting Örneği:
public class Main {
public static void oyunuBaslat(Hayvan h) {
h.sesCikar();
// Nesnenin gerçekten Kopek olup olmadığını kontrol ediyoruz
if (h instanceof Kopek) {
Kopek k = (Kopek) h; // Güvenli Downcasting
k.topGetir();
} else {
System.out.println("Bu hayvan top getiremez!");
}
}
public static void main(String[] args) {
Hayvan k = new Kopek();
Hayvan c = new Kedi();
oyunuBaslat(k);
System.out.println();
oyunuBaslat(c);
}
}
---
🚀 4. Modern Java Pattern Matching for `instanceof` (Java 16+) 🌟
Java 16 ile birlikte `instanceof` kontrolü ve cast işlemini tek satırda yapmamızı sağlayan harika bir özellik gelmiştir:
public class Main {
public static void hayvanIslem(Hayvan h) {
// Pattern Matching: Doğrudan 'k' adında Kopek değişkenine atanır!
if (h instanceof Kopek k) {
k.topGetir();
}
}
}
---
📝 Bölüm Özeti ve Gelecek Bölüm 🔮
Bu bölümde Polymorphism felsefesini, Upcasting ve Downcasting kavramlarını, `instanceof` kontrolünü ve modern Pattern Matching yapısını öğrendik.
👉 **Bölüm 11'de Bizi Ne Bekliyor?**
• OOP'nin Dördüncü Ana Temeli: **Abstraction (Soyutlama)** 🎨
• Soyut Sınıflar (**Abstract Classes**) ve `abstract` Metotlar
• Arayüzler (**Interfaces**) ve `implements` Kull
anımı
• Abstract Class vs Interface Karşılaştırması
Sorularınızı konu altından iletebilirsiniz. Bir sonraki bölümde görüşmek üzere! ☕✨
🔒 Bu içeriği görmek için giriş yapın