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
abstractkulcsszó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.