#7.11 php Наследование классов
Primary tabs
Зачастую удобно не разрабатывать новый класс заново, а основать его на каком-либо другом классе. Например, предположим, что разработан класс Vehicle
, в котором содержатся разнообразные методы управления транспортным средством, например, start
, run
, step
и stop
. Далее, пусть требуется создать классы, описывающие специфические типы транспортных средств, например, Car
, Truck
, Helicopter
, Oceanliner
и т.д.
Можно скопировать существующие методы start
, run
, step
и stop
из класса Vehicle
в каждый из вновь создаваемых классов, а можно создать эти классы на основе базового класса при помощи механизма наследования. Путем наследования все свойства и методы базового класса (например, Vehicle
) становятся доступными для всех его потомков (Car
и т.д.). Кроме того, каждый из порожденных классов может иметь свои собственные свойства и методы.
В следующем примере на основе базового класса Animal
создается порожденный класс Lion
. Он будет содержать все свойства и методы базового класса; кроме того, в нем описывается новый метод -- roar
. Поскольку далеко не все животные рычат, наличие такого метода в базовом классе было бы некорректным. В то же время львы рычат, и метод roar
отлично вписывается в класс Lion
.
Для порождения одного класса от другого используется ключевое слово extends
, после которого указывается имя базового класса. Класс, который наследуется от базового, называется производным. После создания объекта класса Lion
доступным является не только его собственный метод roar
, но и метод set_name
, описанный в базовом классе Animal
.
Пример 1. Наследование классов
<HTML> <HEAD> <TITLE>Наследование класса</TITLE> </HEAD> <BODY> <CENTER> <H1> Наследование класса </H1> <?php class Animal { protected $name; public function set_name($text) { $this->name = $text; } public function get_name() { return $this->name; } } class Lion extends Animal { public function roar() { echo $this->name, " рычит! <BR>"; } } echo "Создание нового льва...<BR>"; $lion = new Lion; $lion->set_name("Бонифаций"); echo $lion->roar(); ?> </CENTER> </BODY> </HTML>
Результат выполнения примера представлен на рисунке 1. Применение наследования позволяет повторно использовать значительные объемы кода.
- Log in to post comments
- 510 reads