Junior
Mis on abstraktse klassi olemus?
sobes.tech AI
Vastus AI-lt
Abstraktne klass toimib kui mall teiste klasside jaoks. Seda ei saa otse luua, kuid see võib sisaldada abstraktseid meetodeid (ilma kehas), mida alamklassid peavad rakendama, ning ka konkreetseid meetodeid ja omadusi.
Peamised omadused:
- Ei saa luua eksemplari:
new AbstraktneKlass()põhjustab vea. - Pärimine: ainult pärimine (
extends). - Abstraktsed meetodid: määratlevad liidese, mida alamklassid peavad rakendama. Märgitud sõnaga
abstractning neil pole keha. - Konkreetseid meetodeid ja omadusi: saab määratleda ja kasutada otse ning neid saab alamklassides üle kirjutada.
- Osaline rakendamine: pakub üldist struktuuri ja teatud baasfunktsionaalsust, detailid jäävad alamklassidele.
Näide:
<?php
abstract class Kuju {
protected $värv;
public function __construct($värv) {
$this->värv = $värv;
}
abstract public function arvutaPindala(); // Abstraktne meetod
public function saaVärv() {
return $this->värv;
}
}
class Ring extends Kuju {
private $raadius;
public function __construct($värv, $raadius) {
parent::__construct($värv);
$this->raadius = $raadius;
}
public function arvutaPindala() {
return pi() * $this->raadius * $this->raadius;
}
}
class Ruut extends Kuju {
private $külg;
public function __construct($värv, $külg) {
parent::__construct($värv);
$this->külg = $külg;
}
public function arvutaPindala() {
return $this->külg * $this->külg;
}
}
// Kasutamise näide
$ring = new Ring("Punane", 5);
echo "Ring: pindala: " . $ring->arvutaPindala() . ", Värv: " . $ring->saaVärv() . "\n";
$ruut = new Ruut("Sinine", 4);
echo "Ruut: pindala: " . $ruut->arvutaPindala() . ", Värv: " . $ruut->saaVärv() . "\n";
// Järgmine kood põhjustab vea: Fatal error: Instantiating an abstract class
// $abstraktneKuju = new Kuju("Määramata");
Võrdlustabel liideste ja tavaliste klasside kohta:
| Omadus | Abstraktne klass | Liides | Tavaline klass |
|---|---|---|---|
| Objekti loomine | Ei | Ei | Jah |
| Pärimine | Jah (extends) + rakendamine (implements) |
Ainult rakendamine (implements) |
Jah (extends) |
| Meetodid | Konkreetsed ja abstraktsed | Ainult abstraktsed (ilma kehas) | Ainult konkreetsed |
| Omadused | Jah | Ei | Jah |
| Mitme pärimise võimalus | Ei | Jah | Ei |
| Otstarve | Osaline rakendamine, üldine struktuur | Lepingu määratlus (käitumine) | Täielik rakendamine, konkreetne objekt |
Kasutatakse, kui on ühine loogika ja omadused, mis peavad olema seotud klasside vahel, kuid nende konkreetne käitumine (meetodite rakendamine) erineb. Tagab koodi korduvkasutuse ja ühtse struktuuri.