Vai vari pastāstīt par mantošanas principiem objektorientētajā programmēšanā?
sobes.tech AI
Atbilde no AI
Manto ļauj izveidot jaunu klasi (atvasinātu vai apakšklasi), kas balstīta uz esošo klasi (vecāku, pamata vai superklasi). Atvasinātā klase manto vecāka klases īpašības (atribūtus) un metodes, kā arī var pievienot savas vai pārrakstīt mantojumus.
Galvenās koncepcijas:
- Funkcionalitātes paplašināšana: Mantojot no vecāku klases, apakšklase iegūst pamata funkcionalitāti un to var paplašināt, pievienojot jaunas metodes vai īpašības.
- Metodes pārrakstīšana: Apakšklase var mainīt vecāku klases metodes uzvedību, izveidojot metodi ar to pašu nosaukumu (polimorfisms).
- Koda atkārtota izmantošana: Tas ļauj izvairīties no koda dublēšanas, jo kopīgā loģika ir definēta vecāku klasē.
- "Ir" attiecība: Mantošana modelē "ir kaut kas" attiecību (is-a). Piemēram, "Kaķis ir dzīvnieks".
<?php
class Animal {
protected $name;
public function __construct($name) {
$this->name = $name;
}
public function speak() {
echo "Nezināms skaņa\n";
}
}
class Dog extends Animal {
public function speak() {
echo "Hau-hau!\n";
}
}
class Cat extends Animal {
public function speak() {
echo "Mau-mau!\n";
}
}
$dog = new Dog("Bobs");
$dog->speak(); // Izvade: Hau-hau!
$cat = new Cat("Murka");
$cat->speak(); // Izvade: Mau-mau!
?>
PHP mantošana tiek īstenota ar atslēgvārdu extends. Viena klase var manto tikai no viena klases (vienkārša mantošana), bet var realizēt vairākus interfeisus.
Pieeja vecāku klases īpašībām un metodēm no apakšklases ir iespējama ar parent:: atslēgvārdu:
<?php
class ParentClass {
protected $value = "vecāku vērtība";
public function showValue() {
echo $this->value . "\n";
}
}
class ChildClass extends ParentClass {
// Pārrakstīt īpašību
protected $value = "dēla vērtība";
public function showValues() {
// Izsaucam vecāku klases metodi
parent::showValue();
// Izvadām dēla klases vērtību
echo $this->value . "\n";
}
}
$obj = new ChildClass();
$obj->showValues();
// Izvade:
// vecāku vērtība
// dēla vērtība
?>
Pieejas modifikatori:
public: pieejams visur.protected: pieejams klases iekšienē un mantojošās klasēs.private: pieejams tikai klases iekšienē.
Metodes var tikt deklarētas kā final, kas aizliedz to pārrakstīšanu mantojošās klasēs. Klases arī var būt final, kas aizliedz to mantošanu. Var būt arī abstract, kas prasa to realizāciju mantojošās klasēs.