【问题标题】:How to Initialize Interface In Flex?如何在 Flex 中初始化接口?
【发布时间】:2014-01-24 14:00:23
【问题描述】:

我是 Flex 的新手。我对 Flex 中的接口有一些疑问。正如我们所知,AS3 也是一种面向对象的语言。 问题是:

1.如果A类扩展了B类,那么A类就不能实现接口C。为什么?

  1. 不扩展其他类的类可以实现接口。这背后的原因是什么?

  2. 为什么我们不能为 Flex 接口中的函数声明提供访问说明符?

    为什么我们不能这样写 A类扩展B类实现C

用代码更新我的问题

接口部分->

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");
        }   

    }

}

B类->

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- 覆盖未标记为覆盖的函数。

请指导我。

【问题讨论】:

  • Why can't we write like class A extends class B implements C > 是的,你可以

标签: actionscript-3 apache-flex flex4


【解决方案1】:

我不完全确定你在问什么,但你所描述的应该是可能的。

一个有效的例子:

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(),但已将其声明为私有 - 它无法从外部访问,因此不符合接口。

【讨论】:

  • 如果我必须在 A 类中显示覆盖并且我也在尝试实现接口 C。会不会一样。因为我在 A 类中使用覆盖并实现接口。它给了我错误。
  • @AnujSharma 覆盖应该没问题。例如,如果我通过编写public override function foo():void 覆盖ClassA 中的foo()(在ClassB 中定义),则所有内容都将按应有的方式编译,因为该类仍公开接口中定义的foo 方法。请用您遇到的错误和您遇到问题的类的结构更新您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
相关资源
最近更新 更多