Junior
V čem spočívá podstata abstraktní třídy?
sobes.tech AI
Odpověď od AI
Podstata abstraktní třídy spočívá v tom, že slouží jako šablona pro jiné třídy. Nemůže být přímo vytvořena, ale může obsahovat abstraktní metody (bez těla), stejně jako konkrétní metody a vlastnosti.
Klíčové body:
- Nelze vytvořit instanci:
new AbstraktTrida()způsobí chybu. - Dědičnost: Pouze dědění (
extends). - Abstraktní metody: Definují rozhraní, které musí být implementováno podtřídami. Označují se klíčovým slovem
abstracta nemají tělo. - Konkrétní metody a vlastnosti: Mohou být přímo definovány a použity, stejně jako přepsány v podtřídách.
- Částečná implementace: Poskytuje obecnou strukturu a určitou základní funkcionalitu, detaily implementace jsou na podtřídách.
Příklad:
<?php
abstract class Tvar {
protected $barva;
public function __construct($barva) {
$this->barva = $barva;
}
abstract public function vypocitatPlochu(); // Abstraktní metoda
public function ziskejBarvu() {
return $this->barva;
}
}
class Kruh extends Tvar {
private $polomer;
public function __construct($barva, $polomer) {
parent::__construct($barva);
$this->polomer = $polomer;
}
public function vypocitatPlochu() {
return pi() * $this->polomer * $this->polomer;
}
}
class Ctverec extends Tvar {
private $strana;
public function __construct($barva, $strana) {
parent::__construct($barva);
$this->strana = $strana;
}
public function vypocitatPlochu() {
return $this->strana * $this->strana;
}
}
// Příklad použití
$kruh = new Kruh("Červená", 5);
echo "Plocha kruhu: " . $kruh->vypocitatPlochu() . ", Barva: " . $kruh->ziskejBarvu() . "\n";
$ctverec = new Ctverec("Modrá", 4);
echo "Plocha čtverce: " . $ctverec->vypocitatPlochu() . ", Barva: " . $ctverec->ziskejBarvu() . "\n";
// Následující kód způsobí chybu: Fatal error: Nelze instancovat abstraktní třídu
// $abstraktniTvar = new Tvar("Neznámý");
Porovnávací tabulka s rozhraními a běžnými třídami:
| Charakteristika | Abstraktní třída | Rozhraní | Běžná třída |
|---|---|---|---|
| Vytvoření instance | Ne | Ne | Ano |
| Dědičnost | Ano (extends) + Implementace (implements) |
Pouze Implementace (implements) |
Ano (extends) |
| Metody | Konkrétní a abstraktní | Pouze abstraktní (bez těla) | Pouze konkrétní |
| Vlastnosti | Ano | Ne | Ano |
| Vícečetná dědičnost | Ne | Ano | Ne |
| Účel | Částečná implementace, obecná struktura | Definice kontraktu (chování) | Kompletní implementace, konkrétní objekt |
Používá se, když existuje společná logika a vlastnosti, které musí mít skupina souvisejících tříd, ale jejich konkrétní chování (implementace některých metod) se liší. Zajišťuje opakované použití kódu a jednotnou strukturu tříd.