我知道包是Classes和Interfaces的集合,旨在组织和分类其内容。 我也知道Classes是Objects的定义,以及它们的说明,它们的属性/变量,以及它们的函数/方法。
但是,我还没有理解界面是什么,或者它真正的用途......
我在Adobe的网站上看过这个定义..:
接口
用法
interface InterfaceName [extends InterfaceName ] {}
定义一个接口。接口是定义一组方法的数据类型;这些方法必须由实现该接口的任何类定义。
接口类似于类,具有以下重要差异:
•接口仅包含方法声明,而不包含其实现。也就是说,实现接口的每个类都必须为接口中声明的每个方法提供一个实现。
•
Interface
方法定义不能包含public
或private
等任何属性,但实现的方法必须在实现该类的类的定义中标记为public
接口•接口可以通过
extends
语句继承多个接口,也可以通过implements
语句继承。与ActionScript 2.0不同,ActionScript 3.0允许在接口定义中使用getter和setter方法。
......但是,这太模糊了,对我没有帮助。
有没有人知道ActionScript中接口的用途和正确实现和/或设计?
答案 0 :(得分:7)
接口基本上让你宣布“这个课可以做这些事。”
作为一个真实世界的例子,你可能想要制作一个游戏教程,逐一突出显示屏幕上的每个不同控件。每个控件可能会闪烁或反弹以突出显示自己,因此您可以说它们实现了“IHighlightable
”界面,让他们处理其余的事情:
public interface IHighlightable {
function highlight():void;
}
然后在你的控件中:
public class Control implements IHighlightable {
public function highlight():void {
// Bounce and flash!
}
}
这意味着您可以执行以下操作:
private function highlightControl(tutorialItem:IHighlightable):void {
tutorialItem.highlight();
}
重要的是,你可以让一个类实现多个接口,这在类共享能力时很有用,但是让它们都扩展一个公共基类是没有意义的。
答案 1 :(得分:1)
接口是合同。编译时机制强制您实现实现方法。在大型OOP代码库中,最佳做法是让其他类依赖于接口而不是其他类,因此您可以交换实现而无需更改消耗接口的代码(这种优势在实践中是可记录的,因为通常是接口也会改变。)
我相信接口是从Java借来的,它引入了它们以实现多态(ClassA
可以同时为IFoo
和IBar
类型)继承自多个抽象类(您只能扩展一个类,但您可以实现任意数量的接口)。
答案 2 :(得分:0)
虽然我在技术上是错误的,但我认为接口类似于C ++抽象类。
接口用于定义属性和方法,而无需实际实现它们。此外,它们无法实例化
var test:FooInterface = new FooInterface() // would error