💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
一个接口可以被理解为类的签名,因为它描述了类的公共字段。接口不提供实现,而是纯粹的结构上的信息: ~~~ interface Printable { public function toString():String; } ~~~ 语法和类的相似,但有以下例外: * 使用 `interface` 关键字而不是 `class` 关键字 * 函数不需要任何表达式 * 每个字段必须有一个显式的类型 接口,它不像 [结构子类型化(第3.5.2节)](http://#),它描述和类之间一个静态的关系。一个指定的类,如果被显式地陈述如下,则只被认为是兼容一个接口: ~~~ class Point implements Printable { } ~~~ 这里,`implements` 关键字表示 `Point` 类有一个到 `Printable` 接口的“is-a”关系,即每个 `Point` 的实例同时也是 `Printable` 接口的实例。虽然一个类只能有一个父类,但是它可以通过使用多个 `implements` 关键字实现多个接口: ~~~ class Point implements Printable implements Serializable ~~~ 编译器检查是否实现了假设。也就是说,它确保类实际上实现了接口必须的所有字段。一个字段,如果类或者任何它的父类提供了一个实现,那么它被认为是实现了。接口字段不限于方法。也可以是变量或者属性: ~~~ interface Placeable { public var x:Float; public var y:Float; } class Main implements Placeable { public var x:Float; public var y:Float; static public function main() { } } ~~~ 接口可以扩展多个其它的接口,使用 `extends` 关键字: ~~~ interface Debuggable extends Printable extends Serializable ~~~ >[warning]**花絮**:实现的语法 Haxe 3.0 之前 需要多个 `implements` 关键字,使用逗号 `,` 隔开。我们决定遵循 Java 事实上的标准,免除了逗号。这个是 Haxe 2 和 Haxe 3 之间的一个致命变更。