2014-01-24 57 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'方法在界面中定义。请用你得到的错误和你有问题的课程结构更新你的问题。 –