Руководство по actionscript. часть 1, стр. 106

Перекрытие методов экземпляра

В этой главе мы уже познакомились с такими методиками наследования, как повторное использование, когда подкласс использует методы и переменные своего суперкласса, и расширение, когда подкласс добавляет собственные методы и переменные. Сейчас мы рассмотрим еще одну методику — переопределение, при которой подкласс реализует альтернативную версию метода, определенного в его суперклассе.

Л_

Имейте в виду, что методики повторного использования, расширения и переопределения не являются взаимоисключающими. В подклассе могут применяться все три методики.

щ

Переопределение позволяет приспособить существующий класс для решения специфической задачи путем дополнения, наложения ограничений или даже аннулирования одной или нескольких исходных возможностей. Переопределение метода на техническом языке называется перекрытием.

j&_

Язык ActionScript 3.0 позволяет переопределять методы экземпляра, но не допускает переопределения переменных экземпляра, статических переменных и статических методов.

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

public class А { // Объявление метода экземпляра в суперклассе public function m ( ) { traceCA’s m( ) was called»);

}

}

Рассмотрим также следующий код, в котором создается класс В, унаследованный от класса А:

// Класс В является подклассом класса А

public class В extends А {

}

Чтобы перекрыть метод m ( ) в классе В, мы используем следующий код:

public class В extends А { // Перекрытие метода суперкласса т( )

override public function m ( ) { traceC’B's m( ) was called»):

}

}

Обратите внимание, что версия метода m ( ) класса В обладает не только таким же именем, как у версии метода класса А, но и таким же модификатором управления доступом (то есть public).

~~ » «

^ I Для успешного перекрытия метода необходимо, чтобы у перекрывающей версии метода м$ 4 * и У перекрываемого метода совпадали имя, модификатор управления доступом, список —параметров и возвращаемый тип (возвращаемые типы будут рассмотрены в гл. 8). В противном случае произойдет ошибка.

Когда метод m ( ) вызывается через экземпляр класса А, среда выполнения Flash использует описание метода из класса А. Однако когда метод m ( ) вызывается через экземпляр класса В, среда Flash использует описание метода из класса В вместо описания из класса А:

var alnstance = new А( );

alnstance. m( ); // Выводит: A’s m( ) was called var blnstance = new B( );

blnstance. m( ); // Выводит: B’s m( ) was called

Рассмотрим более реальный пример. Предположим, что мы разрабатываем геометрическую программу, отображающую прямоугольники и квадраты. Прямоугольники в нашей программе будет представлять класс Rectangle, продемонстрированный в следующем коде:

public class Rectangle { protected var w = 0: protected var h = 0:

public function setSize (newW, newH) { w = newW; h = newH;

}

public function getArea ( ) { return w * h:

}

}

Для представления квадратов в программе мы могли бы создать совершенно независимый класс Square. Однако квадрат на самом деле представляет собой не что иное, как прямоугольник с равными сторонами. Чтобы воспользоваться этим подобием, мы создадим класс Square, расширяющий класс Rectangle, но при этом модифицирующий метод set Size ( ) для предотвращения присваивания значений переменным w и h в тех случаях, когда значения параметров newW и newH не равны между собой. Это ограничение относится только к квадратам, а не к прямоугольникам вообще, поэтому оно не реализуется в классе Rectangle.

Рассмотрим код класса Square, в котором продемонстрирован перекрытый метод setSize ( ):

public class Square extends Rectangle { override public function setSize (newW, newH) { // Это ограничение, накладываемое классом Square if (newW == newH) { w = newW; h = newH;

}

}

}

При вызове метода setSize ( ) через экземпляр класса Square или Rectangle среда выполнения Flash использует ту версию метода, которая соответствует фактическому классу экземпляра. Например, в следующем коде мы вызываем метод s е t S i z е ( ) через экземпляр класса Rectangle. Среда Flash знает, что классом экземпляра является Rectangle, поэтому вызывается версия метода setSize ( ) из этого класса:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Оставить комментарий

Вы должны авторизоваться для отправки комментария.

Полезные ссылки
Случайные записи
  • 20.07.2012">YouTube представил инструмент для размытия лиц
  • 23.02.2011">Руководство по actionscript. часть 7, стр. 038
  • 17.03.2011">Руководство по actionscript. часть 2, стр. 143
  • 06.03.2011">Руководство по actionscript. часть 4, стр. 145
  • 14.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.61
  • 17.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.8
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 006
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 135
  • 22.03.2011">Руководство по actionscript. часть 2, стр. 026
  • 12.04.2011">Делаем загар при помощи Photoshop
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.84
  • 01.10.2010">Что такое экшен и как с ним работать?
  • 22.01.2011">Руководство по actionscript. часть 1, стр. 103
  • 09.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.162
  • 16.03.2011">Руководство по actionscript. часть 3, стр. 020
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...