Ошибка при работе с классом ActionScript и интерфейсом в FLEX 3, ActionScript 3.0 - PullRequest
0 голосов
/ 20 декабря 2011

В настоящее время я новичок в ActionScript и создаю интерфейс и класс, где класс реализует интерфейс.Я создал интерфейс и класс в папке src / com.Вот код, который я делал до сих пор.

Интерфейс

package com
{
    public interface TestData
    {
        function getInput(str:String):void
        function getOutput():String
    }
}

Класс

package com
{
    public class EntityEL implements TestData
    {
        public var uname:String;

        function getOutput():String
        {
            return uname;
        }

        function getInput(str:String):void
        {
            uname = str;
        }

        public function EntityEL()
        {

        }
    }
}

mxml файл

public var etn:EntityEL = new EntityEL();

public function btnClick():void
        {
            etn.getInput(value.text);
            Alert.show(etn.getOutput());
        }


<mx:Button label="Button Click" click="{btnClick();}" />
<mx:TextInput id="value" />

Я получаюошибка " 1044: метод интерфейса getInput в пространстве имен com: TestData не реализован классом com: EntityEL. "

Пожалуйста, помогите мне решить эту проблему.

1 Ответ

3 голосов
/ 20 декабря 2011

Идея интерфейса состоит в том, чтобы определить контракт между объектами вызывающей и вызываемой сторон: какие методы могут быть доступны, какие параметры требуются и какие данные будут возвращены.

Чтобы этот контракт имел какой-либо смысл, эти методы должны быть доступны, чтобы "внешний мир" мог их вызывать.

Когда вы опускаете модификаторы доступа, компилятор Flex принимает internal в качестве значения по умолчанию, что означает, что классы из одного и того же пакета имеют разрешение на доступ к методам - ​​и поэтому в некоторой степени этот контракт кажется выполненным. То же самое будет верно для любого другого пространства имен.

Как ни странно, Adobe явно не позволяет этого : Ваши реализации методов должны быть public.

Однако вы можете объявить свой интерфейс как internal, так что только классам из пакета разрешено его реализовывать, и это также оставляет способ сохранить внутренний API - если это было ваше намерение.

...