Junior
Kāda ir abstraktās klases būtība?
sobes.tech AI
Atbilde no AI
Abstrakta klase ir kalpo kā šablons citām klasēm. Tā nevar tikt tieši izveidota, bet var saturēt abstraktus metodes (bez ķermeņa), kuras jāīsteno bērnu klasēs, kā arī konkrētas metodes un īpašības.
Galvenās iezīmes:
- Nav iespējams izveidot instanci:
new AbstraktaKlase()izraisīs kļūdu. - Mantošana: tikai mantošana (
extends). - Abstraktas metodes: nosaka saskarni, kuru jāīsteno bērnu klasēm. Marķētas ar vārdu
abstractun tām nav ķermeņa. - Konkrētas metodes un īpašības: var būt definētas un tieši izmantotas, kā arī pārdefinētas bērnu klasēs.
- Daļēja īstenošana: nodrošina kopēju struktūru un noteiktu pamatfunkcionalitāti, detaļas atstājot bērnu klasēm.
Piemērs:
<?php
abstract class Figūra {
protected $krāsa;
public function __construct($krāsa) {
$this->krāsa = $krāsa;
}
abstract public function aprēķinātPlatību(); // Abstrakta metode
public function iegūtKrāsu() {
return $this->krāsa;
}
}
class Aplis extends Figūra {
private $rādiuss;
public function __construct($krāsa, $rādiuss) {
parent::__construct($krāsa);
$this->rādiuss = $rādiuss;
}
public function aprēķinātPlatību() {
return pi() * $this->rādiuss * $this->rādiuss;
}
}
class Kvadrāts extends Figūra {
private $malas;
public function __construct($krāsa, $malas) {
parent::__construct($krāsa);
$this->malas = $malas;
}
public function aprēķinātPlatību() {
return $this->malas * $this->malas;
}
}
// Piemērs izmantošanai
$aplis = new Aplis("Sarkana", 5);
echo "Aplis: platība: " . $aplis->aprēķinātPlatību() . ", krāsa: " . $aplis->iegūtKrāsu() . "\n";
$kvadrāts = new Kvadrāts("Zila", 4);
echo "Kvadrāts: platība: " . $kvadrāts->aprēķinātPlatību() . ", krāsa: " . $kvadrāts->iegūtKrāsu() . "\n";
// Nākamais kods izraisīs kļūdu: Fatal error: Instantiating an abstract class
// $abstraktaFigūra = new Figūra("Nezināma");
Salīdzināšanas tabula ar saskarnēm un parastajām klasēm:
| Raksturlielums | Abstrakta klase | Saskarne | Parasta klase |
|---|---|---|---|
| Objekta izveide | Nē | Nē | Jā |
| Mantošana | Jā (extends) + īstenošana (implements) |
Tikai īstenošana (implements) |
Jā (extends) |
| Metodes | Konkrētas un abstraktas | Tikai abstraktas (bez ķermeņa) | Tikai konkrētas |
| Īpašības | Jā | Nē | Jā |
| Daudzveidīga mantošana | Nē | Jā | Nē |
| Mērķis | Daļēja īstenošana, kopēja struktūra | Līguma definīcija (uzvedība) | Pilna īstenošana, konkrēts objekts |
Tiek izmantots, kad ir kopēja loģika un īpašības, kas jābūt saistītajām klasēm, bet to konkrētā uzvedība (metožu īstenošana) atšķiras. Nodrošina koda atkārtotu izmantošanu un vienotu struktūru.