2014-01-24 54 views
0

我是新來的Flex。我對Flex中的Interface有一些疑問。正如我們所知,AS3也是一種面向對象的語言。 問題是:如何在Flex中初始化接口?

1.if class A extends Class B然後Class A不能實現接口C.爲什麼?

  1. 不擴展其他類的類可以實現該接口。這背後的原因是什麼?

  2. 爲什麼我們無法爲Flex Interface中的函數聲明提供訪問說明符?

    爲什麼我們不能寫這樣 A類擴展類B實現Ç

更新我的問題與代碼

接口部分 - >

package 
{ 
    public interface InterfaceTesting 
    { 
     function foo():void;   
    } 

} 

A類 - >

package 
{ 
    import mx.controls.Alert; 

    public class A 
    { 
     public function test():void 
     { 
      trace("control is in Top Class") 
      Alert.show("control is in Top Class"); 
     } 

    } 

} 

類 - >

package 
{ 
    import mx.controls.Alert; 
    import mx.messaging.channels.StreamingAMFChannel; 
    import mx.states.OverrideBase; 

    public class B extends A implements InterfaceTesting 
    { 
     override public function test():void 
     { 
      Alert.show("We are in Second Class"); 
     } 

     public function foo():void 
     { 
      Alert.show("This is Interface Implementation"); 
     } 
} 
} 

我得到在類B.這是1024-重寫未標記爲倍率的功能的錯誤。

請引導我。

+0

'爲什麼我們不能像A類一樣寫擴展B類實現C'>是的,你可以 – RIAstar

回答

0

我不完全確定你在問什麼,但是你所描述的應該是可能的。

有效例如:

ClassA.as

package { 
    public class ClassA extends ClassB implements InterfaceC { 
     public function ClassA() { 

     } 

     public function bar():void { 

     } 
    } 
} 

ClassB.as

package { 
    public class ClassB { 

     public function ClassB() { 

     } 

     public function foo():void { 

     } 
    } 
} 

InterfaceC.as

package { 
    public interface InterfaceC { 
     function foo():void; // Will be inherited from ClassB 
     function bar():void; // Is defined in ClassA 
    } 
} 

編輯:關於你的第三個問題:

要遵守的接口,在接口中定義的方法必須要麼publicinternal。這是因爲一個接口只用於聲明公開可用的方法。

如果您的課程實施InterfaceC(上述)幷包含功能foo(),但已聲明它是私人的 - 它不能在外部達到,因此將不符合該接口。

+0

如果我必須在類A中顯示重寫,並且我也試圖實現接口C。 它會工作相同。因爲我在A類中使用重寫並實現接口。 它給了我錯誤。 –

+0

@AnujSharma重寫應該沒問題。例如,如果我通過寫入'public override function foo():void'來覆蓋'ClassA'中的'foo()'(它在'ClassB'中定義),則所有事情都會按原樣編譯,因爲類仍在暴露' foo'方法在界面中定義。請用你得到的錯誤和你有問題的課程結構更新你的問題。 –