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

Var г = new RectangleC ); r. setSize(4,5):

trace(r. getArea( )); // Выводит: 20

В отличие от этого, в следующем коде мы вызываем метод setSize ( ) через экземпляр класса Square. На этот раз среда выполнения Flash знает, что классом экземпляра является Square, поэтому версия метода setSize ( ) вызывается именно из этого класса, а не из класса Rectangle:

var s = new Square( ): s. setSize(4,5):

trace (s. getArea( )); // Выводит: 0 (Метод setSize( ) предотвращает

// присваивание недопустимых значений)

В предыдущем коде результат вызова метода s. get Area ( ) равен 0. Это говорит о том, что значения переменных w и h не были установлены при вызове метода s. setSize ( ). В версии метода setSize ( ) класса Square значения переменным w и h присваиваются только в том случае, когда значения параметров newW и newH равны между собой.

Вызов перекрытого метода экземпляра. Когда подкласс перекрывает метод экземпляра, версия этого метода, определенная в суперклассе, не теряется. Экземпляры подкласса могут обращаться к этой версии метода посредством оператора super, позволяющего вызывать перекрытый метод следующим образом:

super. имяМетода (аргумент!, аргумент2… аргумент);

В этом коде имяМетода обозначает имя вызываемого перекрытого метода, а аргумент!, аргумент2. . . аргумент — список аргументов, передаваемых в этот метод (другие варианты использования оператора super будут рассмотрены далее в этой главе).

В качестве примера вызова перекрытого метода вернемся к сценарию с классами Square и Rectangle. В предыдущем разделе наш метод Square. setSize ( ) без необходимости дублировал код метода Rectangle. setSize ( ). Рассмотрим версию метода, определенную в классе Rectangle:

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

}

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

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

}

}

Чтобы избежать дублирования кода, используемого в обоих методах для присваивания значений переменным w и h, мы можем воспользоваться оператором super, как показано в следующей модифицированной версии метода Square. setSize ( ):

override public function setSize (newW, newH) { if (newW == newH) { // Вызов метода setSize( ) суперкласса над текущим экземпляром super. setSize(newW, newH);

}

}

Модифицированный метод setSize ( ) KnaccaSquare проверяет, одинаковы ли значения параметров newW и newH. Если значения одинаковы, то вызывается метод setSize ( ) класса Rectangle над текущим экземпляром. Метод setSize ( ) класса Rectangle позаботится о присваивании значений переменным w и п.

Приведенный пример с методом setSize ( ) демонстрирует, как подкласс может перекрывать метод для ограничения его поведения. Кроме того, подкласс может перекрывать метод для дополнения его поведения. Например, следующий код создает класс ScreenRectangle, являющийся подклассом класса Rectangle и отображающий на экране прямоугольник. Подкласс ScreenRectangle перекрывает метод s е t S i z е ( ), сохраняя поведение перекрываемого метода, но при этом добавляя вызов метода draw ( ), в результате чего размеры прямоугольника на экране изменяются всякий раз при вызове метода s е t S i z е ( ):

public class ScreenRectangle extends Rectangle { override public function setSize (newW, newH) { // Вызов версии метода setSize( ) класса Rectangle super. setSize(newW, newH);

// Теперь отображаем прямоугольник на экране draw( );

}

public function draw ( ) { // Здесь размещается код, отображающий прямоугольник на экране

Перекрытие можно использовать и для аннулирования поведения метода. Методика очень проста: версия перекрытого метода подкласса не выполняет никаких действий. Например, следующий код демонстрирует подкласс ReadOnlyRectangle, блокирующий метод setSize ( ) класса Re с tangle, в результате чего исключается возможность изменения размера для экземпляра этого подкласса:

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

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

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

Полезные ссылки
Случайные записи
  • 22.01.2011">Руководство по actionscript. часть 1, стр. 128
  • 09.06.2011">Выбираем курицу
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.59
  • 27.02.2011">Руководство по actionscript. часть 6, стр. 025
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.26
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.82
  • 15.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.44
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.17
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 140
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.6
  • 03.08.2010">Сравнение параметров дизайна
  • 16.08.2010">Нужна ли публикация списка клиентов?
  • 10.03.2011">Руководство по actionscript. часть 4, стр. 037
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 030
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.112
Опрос

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

View Results

Loading ... Loading ...