Синтаксис и использование интерфейсов  ActionScript

 

 

Как уже известно, интерфейс описывает новый тип данных, не предоставляя  

реализацию ни для одного из методов этого типа. Таким образом, для создания  

интерфейса используется следующий синтаксис: 

interface НекоеИмя { 

function метод1 (параметре.типданных... параметрп-.типданных): 

типВозвращаемогоЗначения; 

function метод2 (параметр1:типданных... параметрп-.типданных): 

типВозвращаемогоЗначения; 

function метода (параметре.типданных... параметрп-.типданных): 

типВозвращаемогоЗначения; 

Здесь НекоеИмя — это имя интерфейса, метод 1. . . методп — методы данного  

интерфейса, параметр! : типданных. . . параметра: типданных — параметры методов, а типВоз - 

вращаемогоЗначения — тип данных возвращаемого значения каждого из методов.

 Объявления методов в интерфейсах не включают (и не должны включать)  

фигурные скобки. Следующее объявление метода вызовет ошибку в интерфейсе на этапе 

компиляции, поскольку в объявление включены фигурные скобки: 

function метод 1 (параметр\\типданных):типВозвращаемогоЗначения { 

Возникшая ошибка: 

Methods defined in an interface must not have a body. 

На русском языке ошибка будет выглядеть так: Описываемые в интерфейсе методы 

не должны иметь тела. 

Объявления всех методов в интерфейсе не должны включать модификаторы  

управления доступом. Интерфейсы в языке ActionScript не могут содержать определения 

переменных; описания интерфейсов не могут быть вложенными. Тем не менее 

интерфейсы могут включать get- и set-методы, которые могут применяться для 

имитации переменных (с позиции кода, использующего эти методы). Описания 

интерфейсов, как и описания классов, могут размещаться либо непосредственно 

внутри оператора package, либо за его пределами, но нигде больше. 

Как было сказано в предыдущем разделе, класс, который желает принять тип  

данных интерфейса, должен согласиться реализовать методы этого интерфейса. Чтобы 

сформировать данное соглашение, класс использует ключевое слово implements, 

имеющее следующий синтаксис: 

class НекоеИмя implements НекийИнтерфейс { 

В данном коде НекоеИмя — это имя класса, который обещает реализовать методы 

интерфейса НекийИнтерфейс, а НекийИнтерфейс — имя интерфейса. Говорят, что класс 

НекийКласс «реализует интерфейс НекийИнтерфейс». Обратите внимание, что, если в  

описании класса используется раздел extends, ключевое слово implements должно 

идти после него. Более того, если после ключевого слова implements вместо имени 

интерфейса вы укажете имя класса, компилятор сгенерирует следующую ошибку: 

An interface can only extend other interfaces, but ИмяКласса is a class. 

По-русски она будет выглядеть так: Интерфейс может только расширять другие  

интерфейсы, а ИмяКласса является классом. 

Класс НекоеИмя должен реализовать все методы, описанные в интерфейсе  

НекийИнтерфейс, иначе на этапе компиляции возникнет следующая ошибка: 

Interface method имяМетода in namespace ИмяИнтерфейса not implemented by class 

ИмяКласса. 

На русском языке ошибка означает следующее: Метод интерфейса имяМетода в  

пространстве имен ИмяИнтерфейса не реализован классом ИмяКласса. 

Определения методов в классе, реализующем интерфейс, должны быть  

открытыми и в точности соответствовать определениям методов интерфейса, включая 

количество и типы параметров, а также тип возвращаемого значения. Если между 

интерфейсом и реализующим его классом существует различие по любому из  

перечисленных аспектов, компилятор сгенерирует следующую ошибку: 

Interface method имяМетода in namespace ИмяИнтерфейса is implemented with an 
incompatible signature in class ИмяКласса. 
По-русски она будет звучать так: Метод интерфейса имяМетода в пространстве имен 
ИмяИнтерфейса реализован с несовместимой сигнатурой в классе ИмяКласса. 
Класс может реализовать несколько интерфейсов, разделив их имена запятыми, 
как показано в следующем коде: 
class НекоеИмя implements НекийИнтерфейс, НекийДругойИнтерфейс { 
В данном случае экземпляры класса НекоеИмя принадлежат всем трем указанным 
типам данных: НекоеИмя, НекийИнтерфейс и НекийДругойИнтерфейс. Если класс реализует 
два интерфейса, в каждом из которых описан метод с одним и тем же именем, но 
с отличающейся сигнатурой (то есть имя метода, список параметров и тип  
возвращаемого значения), то компилятор сгенерирует ошибку, указывающую на то, что 
один из методов реализован неправильно. 
С другой стороны, если класс реализует два интерфейса, в каждом из которых 
описан метод с одним и тем же именем и совпадающей сигнатурой, ошибки не 
будет. Однако в связи с этим возникает вопрос: может ли класс предоставить  
функциональность, необходимую обоим интерфейсам, в одном определении метода? 
В большинстве случаев ответ на этот вопрос отрицателен. 
Добавление новых методов в интерфейс, который уже реализован одним или несколькими 
\' классами, приведет к появлению в этих классах ошибок на этапе компиляции (поскольку 
в классах определение новых методов отсутствует)! Таким образом, перед внесением 
изменений в код вы должны тщательно подумать, какие методы будут включены в  
интерфейс, и быть уверенными в архитектуре своего приложения. 
Если класс объявит, что он реализует некий интерфейс, но компилятор не сможет 
найти этот интерфейс, то появится следующая ошибка: 
Interface ИмяИнтерфейса was not found. 
На русском языке ошибка будет выглядеть следующим образом: Интерфейс  
ИмяИнтерфейса не найден. 




BACK NEXT

Сайт является частным собранием материалов и представляет собой любительский информационно-образовательный ресурс. Вся информация получена из открытых источников. Администрация не претендует на авторство использованных материалов. Все права принадлежат их правообладателям