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

// Определение конструктора в явном виде public class В extends А {

// Явное объявление конструктора

public function В ( ) { // Явный вызов метода-конструктора суперкласса

super( );

}

}

// Позволить компилятору автоматически создать конструктор по умолчанию

public class В extends А {

}

Метод-конструктор подкласса может (а зачастую так и происходит) иметь другие параметры, нежели его коллега из суперкласса. Например, в нашем классе Rectangle можно было бы определить конструктор с параметрами width и height, а класс Square мог бы иметь собственный конструктор с одним параметром side (у квадратов ширина и высота совпадает, поэтому не нужно указывать оба значения). В листинге 6.1 продемонстрирован этот код.

Листинг 6.1. Конструкторы классов Rectangle и Square

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

// Конструктор класса Rectangle public function Rectangle (width, height) { setSize(width, height);

}

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

}

public function getArea ( ) { return w * h;

}

}

public class Square extends Rectangle { // Конструктор класса Square public function Square (side) {

// Передаем параметр side в конструктор класса Rectangle

super(side. side);

}

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

}

}

}

Кстати, вы могли бы задаться вопросом, а не лучше ли определить метод s е t S i z е ( ) класса Square с одним параметром s ide, чем иметь два отдельных параметра width

и height. Это демонстрирует следующая версия метода setSize ( ) (обратите внимание, что в методе больше не нужна проверка значений параметров newW и newH на равенство).

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

}

Хотя приведенная версия метода setSize ( ), несомненно, является более подходящей для класса Square, она приведет к ошибке, поскольку имеет меньшее количество параметров, чем версия метода setSize ( ) класса Rectangle (помните, что количество параметров, определенных в перекрывающем методе, должно совпадать с количеством параметров перекрываемого метода). Позднее, в подразд. «Наследование в сравнении с композицией» разд. «Теория наследования», мы рассмотрим альтернативный допустимый вариант реализации версии метода setSize( )с одним параметром в классе Square.

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

public class Ball { private var r;

public function Ball (radius) { r = radius;

}

}

public class ColoredBall extends Ball { private var c;

// Это проблематичный конструктор… public function ColoredBall (color) {

// Ой! Отсутствует вызов оператора super( ). Здесь произойдет ошибка,

// поскольку в конструктор класса Ball необходимо передать аргумент

// для параметра radius

С = color;

}

}

Далее приводится исправленная версия класса ColoredBall, в которой требуемый аргумент передается в конструктор класса Ball:

public class ColoredBall extends Ball { private var c;

// Все исправлено…

public function ColoredBall (radius, color) { super(radius); с = color;

Обратите внимание, что, если придерживаться хорошего тона программирования, в конструкторе подкласса сначала перечисляются параметры суперкласса (в данном случае radius), а затем дополнительные аргументы конструктора подкласса (в данном случае color).

Исключение возможности расширения классов и перекрытия методов

Чтобы исключить возможность расширения класса или перекрытия метода, перед описанием класса или метода необходимо добавить атрибут final. Например, следующий код описывает класс А, не допускающий расширения:

final public class А { }

Поскольку класс А описан с использованием атрибута final, попытка расширить этот класс следующим образом:

public class В extends А { }

завершится ошибкой на этапе компиляции программы:

Base class is final. (Базовый класс является конечным.)

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

public class А { final public function m ( ) { }

}

Поскольку метод m ( ) описан с помощью атрибута f in а 1, попытка перекрыть этот метод следующим образом:

public class В extends А { override public function m ( ) { }

}

завершится ошибкой на этапе компиляции программы:

Cannot redefine a final method. (Невозможно переопределить конечный метод.)

В языке ActionScript атрибут final используется по нескольким причинам.

? В некоторых ситуациях методы, описанные с помощью атрибута final, выполняются быстрее, чем методы, описанные без него. Если вы хотите улучшить производительность вашего приложения всеми возможными способами, попробуйте описать методы, используя атрибут final. Однако стоит отметить, что в будущих версиях среды выполнения Flash корпорация Adobe планирует увеличить скорость выполнения методов, описанных без использования атрибута final, в результате чего она не будет отличаться от скорости выполнения методов, описанных с помощью атрибута final.

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

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

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

Полезные ссылки
Случайные записи
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.25
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.92
  • 03.03.2011">Руководство по actionscript. часть 5, стр. 059
  • 08.03.2011">Руководство по actionscript. часть 4, стр. 097
  • 15.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.53
  • 13.03.2011">Руководство по actionscript. часть 3, стр. 114
  • 03.08.2010">Сравнение параметров дизайна
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.42
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.42
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.94
  • 18.03.2011">Руководство по actionscript. часть 2, стр. 133
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.29
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.111
  • 04.10.2010">Определение цвета пикселя на экране
  • 16.03.2011">Руководство по actionscript. часть 3, стр. 021
Опрос

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

View Results

Loading ... Loading ...