Виртуальные методы

Виртуальным называют метод, который может переопределяться в производном классе. А в нашем случае функции show() и hide() являются виртуальными, и даже более того: в классе shape мы не знаем, как они должны быть "устроены", потому что у нас еще нет информации о типе фигуры. Таким образом, вызывать виртуальные методы shape бессмысленно.

Виртуальные методы базового класса, которые бессмысленно и даже запрещено вызывать непосредственно, называют абстрактными.

В базовом классе shape виртуальные методы show() и hide() "вырождены" и являются абстрактными, нам обязательно нужно переопределить их в производном классе.

<?php ## Производный класс: фигура-круг.

class Circle extends Shape {

private $radius;

// Создает новый объект-круг с указанием радиуса,

public function _construct($radius=100) {

$this->radius = $radius;

parent::_сonstruct();

}

// Отображает круг на экране.

public function show() {

list ($x, $y) = $this->getCoord();

$radius = $this->radius * $this->getScale();

echo "Рисуем круг: ($х, $у, $radius)<br>";

}

// Стирает фигуру с экрана,

public function hide() {

list ($x, $y) = $this->getCoord();

$radius = $this->radius * $this->getScale();

echo "Стираем круг: ($х, $у, $radius)<br>";

}

}

?>

1. Любой объект-круг является также и объектом-фигурой, а потому должен наследовать методы и свойства класса shape. Поэтому объявляем circle производным от Shape.

2. У круга, помимо свойств, присущих фигуре, есть и свои собственные данные: это его радиус. Создаем свойство $radius, в котором он будет храниться и объявляем его как private.

3. Круг имеет свой собственный конструктор, который вызывается в момент создания объекта. При создании указывается радиус круга. Фактически у каждого типа фигуры будут свои собственные конструкторы с различающимися списками параметров. Конструктор обычно не наследуется. НО мы обязательно должны вызвать конструктор базового класса shape, в противном случае фигура не будет проинициализирована( parent::_construct()).

В классе круг необходимо реализовать (переопределить) абстрактные функции show() и hide(). Они должны отображать круг на экране. Если в классе shape мы еще не имели информацию о том, как именно следует прорисовывать фигуру, то в классе circle это должно быть абсолютно ясно.

Виртуальный метод не обязательно должен быть абстрактным.








Дата добавления: 2015-08-26; просмотров: 588;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.