0

请参考帖子: Flash List Control 中的显示复选框?(类似于 Flex 中的 itemrendering)

像往常一样,我总是对接口的意义感到有些困惑。

所以在上面的链接中,我还是不明白指定 ICellRenderer 有什么意义

为什么不能代替:

  public class CustomCellRenderer extends CheckBox implements ICellRenderer 

我可以写

   public class CustomCellRenderer extends CheckBox  

我试图玩上面的线,但它不起作用。我必须指定 ICellRenderer。

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

提前谢谢。维什瓦斯。

4

1 回答 1

1

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

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 的rerepry 方法中接受一个参数,而AsexualAnimal 的那个没有(SexualAnimal 将具有rerepry 方法的重载版本,并会覆盖默认抛出错误)。好的,这一切都很好,现在说在我们到达 Birds 的某个地方,现在我们可以选择如何处理飞行,我们可以 A 在继承链中的某处将飞行添加为布尔值,或者 B 为飞行创建一个接口(也许我们并不关心Animal在继承树中的位置,我们只想知道它可以飞行,因此具有某些属性,如高度和动作,如takeFlight)。

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

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

于 2012-11-14T19:04:45.097 回答