Junior
Tudnál beszélni az öröklés alapelveiről az objektumorientált programozásban?
sobes.tech MI
Válasz az MI-től
Az öröklődés lehetővé teszi egy új osztály (leszármazott vagy származtatott osztály) létrehozását egy meglévő osztály (szülő, alap vagy super osztály) alapján. A leszármazott osztály örökli a szülő osztály tulajdonságait (attribútumokat) és metódusait, és saját tulajdonságokat adhat hozzá vagy felülírhatja az örököltet.
Főbb fogalmak:
- Funkcionalitás bővítése: A szülő osztályból örökléssel a leszármazott osztály alapfunkcionalitást kap, és bővítheti új metódusok vagy tulajdonságok hozzáadásával.
- Metódusok felülírása: A leszármazott osztály megváltoztathatja az örökölt metódus viselkedését a szülő osztályból úgy, hogy ugyanazzal a névvel hoz létre egy metódust (polimorfizmus).
- Kód újrafelhasználás: Elkerüli a kód duplikációját, mivel a közös logika a szülő osztályban van meghatározva.
- "Valami-nek" kapcsolat: Az öröklődés modellezi a "valami-nek" (is-a) kapcsolatot. Például: "Egy macska egy állat".
<?php
class Animal {
protected $name;
public function __construct($name) {
$this->name = $name;
}
public function speak() {
echo "Ismeretlen hang\n";
}
}
class Dog extends Animal {
public function speak() {
echo "Vau-vau!\n";
}
}
class Cat extends Animal {
public function speak() {
echo "Miau-miau!\n";
}
}
$dog = new Dog("Bobby");
$dog->speak(); // Kimenet: Vau-vau!
$cat = new Cat("Murka");
$cat->speak(); // Kimenet: Miau-miau!
?>
PHP-ben az öröklődés a extends kulcsszóval valósul meg. Egy osztály csak egy osztályból örökölhet (egyszerű öröklődés), de több interfészt is megvalósíthat.
A szülő osztály tulajdonságaihoz és metódusaihoz az alosztályból a parent:: kulcsszóval lehet hozzáférni.
<?php
class ParentClass {
protected $value = "szülő értéke";
public function showValue() {
echo $this->value . "\n";
}
}
class ChildClass extends ParentClass {
// Tulajdonság felülírása
protected $value = "gyermek értéke";
public function showValues() {
// Szülő osztály metódusának hívása
parent::showValue();
// A gyermek osztály értékének megjelenítése
echo $this->value . "\n";
}
}
$obj = new ChildClass();
$obj->showValues();
// Kimenet:
// szülő értéke
// gyermek értéke
?>