2013-02-28 3 views
2

Я так удивлен, что этот код компилируется, но что это значит?AS3: интерфейс реализует другой интерфейс

public interface IBar {} 
public interface IFoo implements IBar {} 
+0

Возможно, это зависит на компиляторе, но поскольку интерфейс не может буквально реализовать что-либо, «умный» компилятор может интерпретировать «реализует» как «расширяет» и действует соответствующим образом. Не возражаете ли вы предоставить информацию о том, какой компилятор вы используете, который компилирует это? – Vesper

+0

FlashBuilder 4.6 на Mac OS X. –

+0

Я повторно пометил ваш вопрос как для FlashBuilder. Убедитесь, что в следующий раз вы помечаете свой вопрос точно. –

ответ

4

Это не может быть скомпилирован, так как интерфейс не может implement другой интерфейс, но может extends его:

public interface IFoo extends IBar {} 

Ваш код должен приводит к ошибке:

 
1084: Syntax error: expecting leftbrace before implements. 
+0

Он компилируется в моей среде IDE: FlashBuilder 4.6 на Mac OS X. –

+0

Должно быть объяснение, почему вы думаете, что оно компилируется, может быть, этот код существует в вашем проекте, но на самом деле не скомпилирован, поскольку он не используется. [здесь] (https://dl.dropbox.com/u/77217007/stackoverflow/15133273-as3-an-interface-implements-another-interface/astest.as) является примером, который проверяет его на SDK. Снимок экрана для SDK 4.6 http://pix.am/RK0b.png этого примера. В любом случае в такой языковой структуре есть единственный смысл - расширение интерфейсов. – fsbmain

+1

Он также компилируется на FlashDevelop 4.2.1 в Windows. SDK: Flex 4.6.0. Код, который я показал, фактически является кодом, который мы используем в процессе производства. –