Sobes.tech
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

?>