Можешь рассказать о принципах наследования в объектно-ориентированном программировании?

Наследование позволяет создавать новый класс (дочерний или производный), основанный на существующем классе (родительском, базовом или суперклассе).

Короткий ответ

Что ответить на собеседовании

Наследование позволяет создавать новый класс (дочерний или производный), основанный на существующем классе (родительском, базовом или суперклассе). Дочерний класс наследует свойства (атрибуты) и методы родительского класса, а также может добавлять свои собственные или переопределять унаследованные.

Подробный разбор

Ответ с пояснениями

Наследование позволяет создавать новый класс (дочерний или производный), основанный на существующем классе (родительском, базовом или суперклассе). Дочерний класс наследует свойства (атрибуты) и методы родительского класса, а также может добавлять свои собственные или переопределять унаследованные.

Основные концепции:

  • Расширение функциональности: Наследуя от родительского класса, дочерний класс получает базовую функциональность и может ее расширять, добавляя новые методы или свойства.
  • Переопределение методов: Дочерний класс может изменить поведение метода, унаследованного от родительского класса, путем создания метода с тем же именем (полиморфизм).
  • Повторное использование кода: Позволяет избежать дублирования кода, так как общая логика определяется в родительском классе.
  • Отношение "является": Наследование моделирует отношение "является чем-то" (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, что требует их реализации в дочерних классах.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее