#7.17 php ООП Абстрактные классы и методы
Primary tabs
Абстрактным классом называется базовый класс, который является некоторым обобщением производных классов и не предполагает создание объектов. Например, класс "Геометрическая фигура" может являться обобщением классов "Круг", "Треугольник", "Четырехугольник". А класс "Четырехугольник" — обобщением классов "Прямоугольник", "Ромб", "Трапеция". Для создания абстрактного класса используется ключевое слово abstract
перед определением класса:
<?php abstract class Figure { }
Абстрактный класс объединяет в себе свойства и методы общие для всех его наследников. Например, для каждой геометрической фигуры можно вычислить её площадь. Соответствующий метод get_area()
можно определить в базовом классе следующим образом:
<?php abstract class Figure { protected function get_area() {} }
При этом реализация метода get_area
в классе Figure
отсутствует, и мы ожидаем, что в каждом из производных классов будет представлен собственный вариант вычисления площади.
Такие методы, которые несут лишь описательный характер и не имеют конкретной реализации в базовом абстрактном классе, также называются абстрактными. Для того, чтобы сделать обязательным переоределение метода в каждом классе-наследнике, используется ключевое слово abstract
перед объявлением метода:
<?php abstract class Figure { abstract protected function get_area(); }
Теперь, если какой-то класс наследует класс Figure
, он обязательно должен будет представить некоторую реализацию метода get_area
, например,
class Circle extends Figure { private $r; public function __construct($r) { $this->r = $r; } protected function get_area() { return 2*pi()*($this->r)**2; } }
Взаимосвязь между абстрактными классами и абстрактными методами
- Абстрактные методы могут содержаться только в абстрактных классах. Если мы пропустим
abstract
при объявлении классаFigure
<?php class Figure { abstract protected function get_area(); }
то получим ошибку:
Fatal error: Class Figure contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Figure::get_area)
- Абстрактные классы могут содержать как абстрактные, так и обычные методы, например,
<?php abstract class Figure { abstract protected function get_area(); public function print_area() { echo "Площадь фигуры = ", $this->get_area(); } }
- Log in to post comments
- 297 reads