Супер интерфейс и супер класс с одинаковым именем метода - PullRequest
3 голосов
/ 29 декабря 2011

Я пытаюсь создать средство рендеринга предмета сетки данных искры.Этот рендерер элементов расширяет флажок и реализует IGridItemRenderer

public class CellCheckBoxItemRenderer extends CheckBox implements IGridItemRenderer

Когда я реализую IGridItemRenderer, мне нужно реализовать методы интерфейса, у меня проблема со следующими методами:

public function get hovered():Boolean
{
}

public function set hovered(value:Boolean):void
{
}

поскольку методы также наследуются от флажка

РЕДАКТИРОВАТЬ Подписи функций

//spark checkbox signature
protected function get hovered():Boolean
protected function set hovered(value:Boolean):void

и подпись выше принадлежит интерфейсу IGridItemRenderer

Ответы [ 2 ]

1 голос
/ 31 декабря 2011

Полагаю, реализация IGridItemRenderer является более важной частью, поэтому вы можете использовать ее в сетке данных.CheckBox предоставляет только функциональность, вам не нужно расширять ее, если на мой взгляд есть конфликты.

public class CellCheckBoxItemRenderer implements IGridItemRenderer {

    private var checkBox:CheckBox;

    public function getCheckBox {
        return checkBox;
    }

    //...
}

Если бы CheckBox реализовал какие-либо полезные интерфейсы, вы также можете реализовать их вВаш рендерер и делегируйте методы флажку, который может позволить вам инкапсулировать весь флажок.Здесь дело не в этом.

0 голосов
/ 31 декабря 2011

Проблема заключается в том, что интерфейсы по своей конструкции задают сигнатуру только для public функций, тогда как функция в Checkbox установлена ​​как protected .

Единственные решения:

  • удалить интерфейс / Checkbox класс из CellCheckBoxItemRenderer
  • удалить объявление из интерфейса
  • изменить Checkbox так hovered является публичным свойством
  • это может быть в состоянии динамически изменить средство доступа с помощью проекта байт-кода as3 commons (http://www.as3commons.org/as3-commons-bytecode/emit.html),, но я не уверен на 100%.
...