Sobes.tech
Junior

Mi az absztrakt osztály lényege?

sobes.tech MI

Válasz az MI-től

Az absztrakt osztály lényege, hogy más osztályok számára sablonként szolgáljon. Nem hozható létre közvetlenül, de tartalmazhat absztrakt módszereket (test nélkül), valamint konkrét módszereket és tulajdonságokat.

Főbb pontok:

  • Nem hozható példány: new AbsztraktOsztaly() hibát okoz.
  • Öröklődés: Csak öröklődés az absztrakt osztályból (extends).
  • Absztakt módszerek: Meghatározzák az interfészt, amit az alosztályoknak meg kell valósítaniuk. A abstract kulcsszóval jelöljük, és test nélkül vannak.
  • Konkrét módszerek és tulajdonságok: Közvetlenül definiálhatók és használhatók, valamint felülírhatók az alosztályokban.
  • Részleges megvalósítás: Általános struktúrát és bizonyos alapfunkcionalitást nyújt, a részleteket az alosztályokra bízza.

Példa:

<?php

abstract class Alakzat {
    protected $szín;

    public function __construct($szín) {
        $this->szín = $szín;
    }

    abstract public function területSzámítása(); // Absztrakt módszer

    public function kapSzín() {
        return $this->szín;
    }
}

class Kör extends Alakzat {
    private $Sugár;

    public function __construct($szín, $Sugár) {
        parent::__construct($szín);
        $this->Sugár = $Sugár;
    }

    public function területSzámítása() {
        return pi() * $this->Sugár * $this->Sugár;
    }
}

class Négyzet extends Alakzat {
    private $Oldal;

    public function __construct($szín, $Oldal) {
        parent::__construct($szín);
        $this->Oldal = $Oldal;
    }

    public function területSzámítása() {
        return $this->Oldal * $this->Oldal;
    }
}

// Használati példa
$kör = new Kör("Piros", 5);
echo "Kör területe: " . $kör->területSzámítása() . ", Szín: " . $kör->kapSzín() . "\n";

$négyzet = new Négyzet("Kék", 4);
echo "Négyzet területe: " . $négyzet->területSzámítása() . ", Szín: " . $négyzet->kapSzín() . "\n";

// A következő kód hibát fog okozni: Fatal error: Absztrakt osztály példányosítása nem engedélyezett
// $absztraktAlakzat = new Alakzat("Ismeretlen");

Összehasonlító táblázat interfészekkel és normál osztályokkal:

Jellemző Absztrakt osztály Interfész Normál osztály
Példányosítás Nem Nem Igen
Öröklődés Igen (extends) + Megvalósítás (implements) Csak Megvalósítás (implements) Igen (extends)
Metódusok Konkrét és absztraktak Csak absztraktak (test nélkül) Csak konkrétak
Tulajdonságok Igen Nem Igen
Többszörös öröklődés Nem Igen Nem
Célja Részleges megvalósítás, általános szerkezet Szerződés (viselkedés) meghatározása Teljes megvalósítás, konkrét objektum

Használják, amikor van közös logika és tulajdonságok, amelyeknek egy csoport kapcsolódó osztálynak kell lenniük, de azok viselkedése (egyes módszerek megvalósítása) eltérő. Ez biztosítja a kód újrahasznosítását és az egységes szerkezetet.