CodeBlanks Logo Icon CodeBlanks

Polimorfizm temelleri

Üst sınıf referansı ile alt sınıf nesnesini öğrenirsin.

Polimorfizm temelleri

Polimorfizm, bir üst sınıf referansının alt sınıf nesnesini tutabilmesidir. Java'da tüm normal metotlar sanaldır (virtual); çağrı nesnenin gerçek türüne göre çalışır. Shape s = new Circle(); satırı geçerlidir; s.area() çağrısı Circle sınıfındaki metodu çalıştırır. Buna dinamik bağlama denir.

Aynı kod farklı türler için farklı davranır; yeni bir alt sınıf eklemek üst sınıfı kullanan kodu bozmaz.

Sanal metot çağrısı

Bir üst sınıf referansı üzerinden metot çağırdığında Java referansın türüne değil, nesnenin çalışma zamanı türüne bakar. Shape s = new Circle(); yazdıysan s.area() her zaman Circle'ın area metodunu çağırır.

Bunun sırrı vtable denilen sanal metot tablosudur; her nesne türü için doğru metot kaydı tutulur. Override edilen metotlar otomatik dinamik bağlanır; Java'da ayrı bir virtual anahtar kelimesi yoktur.

Uygulama Shape ve Square sınıflarını yaz

Basit bir polimorfizm örneği yaz. class Shape tanımla; içinde int area() { return 0; } metodu olsun. Sonra class Square extends Shape tanımla; int side alanı, Square(int side) yapıcısı ve override edilmiş area metodu (return side * side;) ekle. main içinde Shape s = new Square(5); ile bir kare oluştur ve System.out.println("Alan: " + s.area()); ile alanı yazdır.

Başlangıç kodu

Main.java
// Shape sınıfını tanımla: area 0 döner

// Square sınıfı Shape'i miras alır; area override edilir

// Bir Square örneğini Shape olarak ata ve alanı yazdır

Örnek çözüm

Main.java
class Shape {
    int area() { return 0; }
}

class Square extends Shape {
    int side;
    Square(int side) { this.side = side; }
    int area() { return side * side; }
}

public class Main {
    public static void main(String[] args) {
        Shape s = new Square(5);
        System.out.println("Alan: " + s.area());
    }
}

Beklenen çıktı

Alan: 25

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Shape s = new Circle(); satırı neyi gösterir?

  • Polimorfik atama; üst referans alt nesneyi tutar Doğru cevap
  • Çoklu kalıtım; iki sınıftan miras alır
  • Generic tür parametresi tanımlar
  • Static metot çağrısı yapar

Açıklama: Üst sınıf referansı alt sınıf nesnesini tutar; bu polimorfizmin temelidir.

2 Alt sınıf bildirimini tamamla

Soru
class Circle ____ Shape {
    double area() { return Math.PI * r * r; }
}
Cevap
class Circle extends Shape {
    double area() { return Math.PI * r * r; }
}

Açıklama: extends anahtar kelimesi sınıf mirasını bildirir.

3 Polimorfizm kavramlarını eşleştir

Kavram Anlamı
virtual Java'da varsayılan metot davranışı
override Alt sınıfta metodu yeniden tanımlama
extends Sınıf mirasını bildirir
super Üst sınıf referansı

Orta seviye bölümündeki tüm dersler