Оё метавонед дар бораи принсипҳои меросгирӣ дар барномасозии объектӣ гап занед?
sobes.tech AI
Ҷавоб аз AI
Наследование позволяет создавать новый класс (подкласс или производный класс), основанный на существующем классе (родительском, базовом или суперклассе). Производный класс наследует свойства (атрибуты) и методы родительского класса, а также может добавлять свои собственные или переопределять унаследованные.
Основные концепции:
- Расширение функциональности: Наследуя от родительского класса, подкласс получает базовую функциональность и может ее расширять, добавляя новые методы или свойства.
- Переопределение методов: Подкласс может изменить поведение метода, унаследованного от родительского класса, путем создания метода с тем же именем (полиморфизм).
- Повторное использование кода: Позволяет избежать дублирования кода, так как общая логика определяется в родительском классе.
- Отношение "является": Наследование моделирует отношение "является чем-то" (is-a). Например, "Кот является животным".
<?php
class Animal {
protected $name;
public function __construct($name) {
$this->name = $name;
}
public function speak() {
echo "Неизвестный звук\n";
}
}
class Dog extends Animal {
public function speak() {
echo "Гав-гав!\n";
}
}
class Cat extends Animal {
public function speak() {
echo "Мяу-мяу!\n";
}
}
$dog = new Dog("Бобик");
$dog->speak(); // Вывод: Гав-гав!
$cat = new Cat("Мурка");
$cat->speak(); // Вывод: Мяу-мяу!
?>
В PHP наследование осуществляется с помощью ключевого слова extends. Один класс может наследовать только от одного класса (одиночное наследование), но может реализовывать множественные интерфейсы.
Доступ к свойствам и методам родительского класса из дочернего возможен с использованием ключевого слова parent::.
<?php
class ParentClass {
protected $value = "родительское значение";
public function showValue() {
echo $this->value . "\n";
}
}
class ChildClass extends ParentClass {
// Переопределение свойства
protected $value = "дочернее значение";
public function showValues() {
// Вызов метода родительского класса
parent::showValue();
// Вывод значения дочернего класса
echo $this->value . "\n";
}
}
$obj = new ChildClass();
$obj->showValues();
// Вывод:
// родительское значение
// дочернее значение
?>
Ключевые модификаторы доступа:
public: Доступен отовсюду.protected: Доступен внутри класса и в наследующих классах.private: Доступен только внутри класса.
Методы могут быть объявлены final, что запрещает их переопределение в дочерних классах. Классы также могут быть final, что запрещает их наследование. Могут быть abstract, что требует их реализации в дочерних классах.