超级接口和超类具有相同的方法名称

时间:2011-12-29 14:43:53

标签: actionscript-3 flex flex4.5 flex-spark

我正在尝试创建一个spark datagrid项呈示器。此项呈示器扩展了一个复选框,并实现了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 个答案:

答案 0 :(得分:1)

我想IGridItemRenderer的实现是更重要的部分,因此您可以在数据网格中使用它。 CheckBox仅提供功能,如果我认为存在冲突,则无需扩展功能。

public class CellCheckBoxItemRenderer implements IGridItemRenderer {

    private var checkBox:CheckBox;

    public function getCheckBox {
        return checkBox;
    }

    //...
}

如果CheckBox将实现任何有用的接口,您也可以在渲染器中实现它们并将方法委托给复选框,这可以让您封装整个复选框。但事实并非如此。

答案 1 :(得分:0)

问题在于,按设计,界面仅指定公共功能的签名,而Checkbox中的功能设置为受保护

唯一的解决方案:

  • Checkbox
  • 中删除界面/ CellCheckBoxItemRenderer课程
  • 从界面中删除声明
  • 更改Checkbox,因此hovered是公共财产
  • 可能可以使用as3 commons字节码项目动态更改访问者(http://www.as3commons.org/as3-commons-bytecode/emit.html),但我'我不是100%肯定。