Ö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:
extendsile bir sınıftan miras almakparent::ile ebeveyne erişmek- Method override ile davranışı değiştirmek
protectedile ç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();
Örnek çözümü göster
:sound 'Hav hav!' döndürür; Puppy::sound parent::sound() çağırıp ' (minik)' ekler.
Örnek çözüm:
<?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();
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.
Kendini test et
-
Aşağıdakilerden hangisi yanlış?
- extends ile miras alınır
- parent:: ile ebeveyne erişilir
- private üyeye çocuk sınıf erişemez
- Çocuk yapıcı tanımlayınca ebeveyn yapıcısı otomatik çağrılır
Cevabı göster
Çocuk yapıcı tanımlayınca ebeveyn yapıcısı otomatik çağrılır — Doğru; bu ifade yanlış. Ebeveyn yapıcısı otomatik çağrılmaz, parent::__construct() gerekir.
-
Puppy'nin override'ını tamamla
public function sound(): string { return ____::sound() . " (minik)"; }Cevabı göster
public function sound(): string { return parent::sound() . " (minik)"; } -
Miras alma kavramlarını eşleştir
- extends
- Miras alma anahtar kelimesi
- parent::
- Ebeveyne erişim
- override
- Aynı isimle yeniden tanımlama
- protected
- Çocuklara açık erişim