CodeBlanks Logo Icon CodeBlanks

Özet - Polimorfizm

Dinamik bağlama ve pattern matching'i birleştirerek bir şekil çizici yazarsın.

Özet - Polimorfizm

Bu grupta polimorfizmi öğrendin: üst sınıf referansı alt sınıf nesnesini tutar; metot çağrısı dinamik olarak bağlanır. override ile üst metodu değiştirirsin; @Override annotation'ı bunu derleme zamanında denetler.

Soyut sınıflar ve interface'ler sözleşme sunar; instanceof ve pattern matching ile tür denetimi yaparsın. Bu özette tüm bunları küçük bir görevde birleştireceğiz.

Uygulama Polimorfik kuş listesi

abstract class Bird tanımla; abstract String sound(); metodu olsun. class Sparrow extends Bird tanımla; @Override ile sound metodu "Cik" döndürsün. class Crow extends Bird tanımla; @Override ile sound metodu "Gak" döndürsün. main içinde List<Bird> birds = new ArrayList<>(); oluştur, new Sparrow() ve new Crow() ekle, for-each ile her birinin sound sonucunu ayrı satırda yazdır.

Başlangıç kodu

Main.java
import java.util.List;
import java.util.ArrayList;

// abstract Bird: abstract String sound();

// Sparrow extends Bird; @Override sound = "Cik"

// Crow extends Bird; @Override sound = "Gak"

// main: birds listesi, iki kuş ekle, for-each ile yazdır

Örnek çözüm

Main.java
abstract class Bird {
    abstract String sound();
}

class Sparrow extends Bird {
    @Override
    String sound() { return "Cik"; }
}

class Crow extends Bird {
    @Override
    String sound() { return "Gak"; }
}

public class Main {
    public static void main(String[] args) {
        List<Bird> birds = new ArrayList<>();
        birds.add(new Sparrow());
        birds.add(new Crow());
        for (Bird b : birds) {
            System.out.println(b.sound());
        }
    }
}

Beklenen çıktı

Cik
Gak

Soru ve cevaplar

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

1 Polimorfizmin temel söz dizimi hangisidir?

  • new Circle() = Shape s
  • Shape s = new Circle(); Doğru cevap
  • Circle extends Shape implements
  • instanceof Circle s

Açıklama: Üst tür değişkeni alt tür nesnesini alır.

2 Override annotation'ını tamamla

Soru
class Sparrow extends Bird {
    ____
    String sound() { return "Cik"; }
}
Cevap
class Sparrow extends Bird {
    @Override
    String sound() { return "Cik"; }
}

Açıklama: @Override derleyici denetimini açar.

3 Polimorfizm özetini eşleştir

Kavram Anlamı
virtual Varsayılan metot davranışı
abstract Örneklenemez referans türü
interface Çoklu kalıtım sözleşmesi
instanceof Tür denetimi ve pattern matching

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