在这种情况下,指定Interface ICellRenderer有什么用处

时间:2012-11-14 15:54:40

标签: actionscript-3

请参考帖子: Display checkbox inside Flash List Control ? (Similar to itemrendering in Flex)

像往常一样,我总是对Interface的重要性感到困惑。

所以在上面的链接中,我仍然没有得到指定ICellRenderer的重要性

为什么不能代替:

  public class CustomCellRenderer extends CheckBox implements ICellRenderer 

我可以写

   public class CustomCellRenderer extends CheckBox  

我尝试使用上面的行,但它不起作用。我必须指定ICellRenderer。

在我看来,Interfaces,只是告诉一个类遵循某个使用函数的规则。如何停止类的工作(如果我已经使用了所有必要的功能,但没有实现所需的接口)

Thnx提前。 Vishwas。

1 个答案:

答案 0 :(得分:1)

由于检查对象上的其他代码而未实现接口可能会导致失败。然而,这也是接口的优点,你的类不需要从某些东西扩展到实现一个接口,所以它可以从任何类任意扩展,但实现一个特定的接口,这意味着它有一些其他功能之外的东西从它的继承链获得。所以Adobe(或任何人)编写了类似的代码:

if(argumentObject is ICellRenderer)
{
   var icr:ICellRenderer = argumentObject as ICellRenderer; //cast so code completion can work
   icr.data = data; //do some stuff on the object that only an ICellRenderer can do
}

让我知道如果这个解释不清楚,我花了很长时间来掌握界面及其使用,但现在我是一个巨大的倡导者。

支持参数

就继承本身而言,只是为了清晰起见,概念是如果某些东西就像其他东西,但具有与之相关的额外属性(名词)或动作(动词),则无需重新编写公共部分。

使用一个常见的例子说你有一个类Animal(像isAlive这样的属性,像重现这样的动作)。现在说你要为SexualAnimal和AsexualAnimal创建一个类,并且在SexualAnimal的重现方法中接受一个参数,而AsexualAnimal的那个没有(SexualAnimal会有一个重载方法的重载版本并且会覆盖默认抛出一个错误)。好的,所以现在好了,现在说我们到达了鸟类的某个地方,现在我们可以选择如何处理飞行,我们可以在继承链的某个地方添加航班作为布尔值或者B创建飞行界面(或许我们并不关心继承树中动物是什么,我们只想知道它可以飞行,因此具有某些属性,如高度和像takeFlight这样的动作。而不是检查您想要在飞行物上使用的每个单独的财产,您只需检查是否为IFlyingThing。

另一种看待这种情况的方法是,作为程序员,我可以编写一个接口,将其交给另一个团队,我们都可以根据接口中建立的“合同”进行操作。例如,我说我需要访问一个数据库来做一些操作,但我不知道他们将长期使用哪种数据库解决方案。所以我写了一个接口,我需要DB能够用X参数获取Y数据,现在我可以自由地编写我的其余代码,假设我提供X而你给我Y,不管是什么我的代码可以使用的底层实现。

有关接口使用的更正式参考,请参阅:http://en.wikipedia.org/wiki/Design_Patterns