CodeBlanks Logo Icon CodeBlanks

Özet - Miras alma

extends, parent:: ve override'la hayvan sınıf hiyerarşisi yazarsın.

Özet - Miras alma

Bu grupta miras alma (inheritance) konusunu öğrendin. Beş temel kavramı artık biliyorsun:

  • extends ile bir sınıftan miras almak
  • parent:: ile ebeveyne erişmek
  • Method override ile davranışı değiştirmek
  • protected ile çocuklara açık erişim
  • Çok seviyeli miras zinciri kurmak

Bu kavramlar birlikte sınıf hiyerarşileri kurmanın temelini oluşturur. Kod tekrarını azaltır, genişletilebilir yapılar sağlar ve gerçek dünyadaki "tür" ilişkilerini modellemene izin verir.

Son görevde bunların hepsini bir hayvan hiyerarşisinde birleştireceksin: Animal, Dog ve Puppy sınıfları yazacaksın.

Uygulama Animal → Dog → Puppy hiyerarşisi

Son görevde tüm öğrendiklerini birleştir! Animal sınıfı hazır geliyor; name property'si ve sound() metodu var ("Ses yok" döndürür). Sen: Dog sınıfını Animal'dan türet ve sound()'u override edip "Hav hav!" döndür. Puppy sınıfını Dog'dan türet ve sound()'u override edip parent::sound() . " (minik)" döndür. Pamuk isimli bir Puppy örneği yapıp adını ve sesini yazdır: echo $puppy->name . ": " . $puppy->sound();

Başlangıç kodu

index.php
<?php

// Hayvan sınıfı
class Animal {
    public string $name;

    public function __construct(string $name) {
        $this->name = $name;
    }

    public function sound(): string {
        return "Ses yok";
    }
}

// Dog sınıfını Animal'dan extends ile türet
// sound() metodunu override et, "Hav hav!" döndürsün

// Puppy sınıfını Dog'dan extends ile türet
// sound() metodunu override et, ebeveynin sound() metodunu çağırıp " (minik)" ekle

// Pamuk isimli bir Puppy örneği yapıp adını ve sesini yazdır

Örnek çözüm

index.php
<?php

// Hayvan sınıfı
class Animal {
    public string $name;

    public function __construct(string $name) {
        $this->name = $name;
    }

    public function sound(): string {
        return "Ses yok";
    }
}

// Köpek sınıfı
class Dog extends Animal {
    public function sound(): string {
        return "Hav hav!";
    }
}

// Yavru köpek sınıfı
class Puppy extends Dog {
    public function sound(): string {
        return parent::sound() . " (minik)";
    }
}

$puppy = new Puppy("Pamuk");
echo $puppy->name . ": " . $puppy->sound();

Beklenen çıktı

Pamuk: Hav hav! (minik)

Miras alma grubunu bitirdin

Tebrikler! Miras alma grubunu tamamladın. Artık extends, parent::, override ve protected ile kod tekrarını önleyen, genişletilebilir sınıf hiyerarşileri kurabilirsin.

Bir sonraki grupta soyut sınıflar (abstract classes) ve arayüzler (interfaces) ile tanışacaksın. Bu yapılar, miras almanın yeteneklerini daha da güçlendirecek ve ortak şablonlar tanımlamana izin verecek.

Ara verip öğrendiklerini pekiştir; sonra birlikte devam edelim.

Soru ve cevaplar

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

1 Aşağıdakilerden hangisi yanlış?

  • extends ile miras alınır
  • parent:: ile ebeveyne erişilir
  • Çocuk yapıcı tanımlayınca ebeveyn yapıcısı otomatik çağrılır Doğru cevap
  • private üyeye çocuk sınıf erişemez

Açıklama: bu ifade yanlış. Ebeveyn yapıcısı otomatik çağrılmaz, parent::__construct() gerekir.

2 Puppy'nin override'ını tamamla

Soru
    public function sound(): string {
        return ____::sound() . " (minik)";
    }
Cevap
    public function sound(): string {
        return parent::sound() . " (minik)";
    }

Açıklama: parent::sound() ile ebeveynin metodunu çağırdın ve genişlettin.

3 Miras alma kavramlarını eşleştir

Kavram Anlamı
extends Miras alma anahtar kelimesi
parent:: Ebeveyne erişim
override Aynı isimle yeniden tanımlama
protected Çocuklara açık erişim

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