HarmonyOS NEXT】鸿蒙中Interface实例实现的书写格式

📅 2026/7/5 4:59:16
HarmonyOS NEXT】鸿蒙中Interface实例实现的书写格式
在 HarmonyOS NEXT 的 ArkTS 开发中Interface接口扮演着定义“契约”的角色它只声明属性和方法的类型而不提供具体实现。真正让接口“活”起来是靠class类或 struct结构体通过implements关键字来实现的。重要说明ArkTS 基于 TypeScript因此其接口实现语法与 TypeScript 基本一致。以下所有示例均基于 ArkTS / TypeScript 语法。1. 核心语法class 实现单接口这是最基础、最常用的实现方式。类必须实现接口中声明的所有属性和方法否则编译会报错。typescript// 1. 定义接口行为的契约 interface AreaSize { color: string; // 属性声明 calculateAreaSize(): number; // 方法声明 someMethod(): void; } // 2. 实现接口类遵循契约 class RectangleSize implements AreaSize { // 必须实现接口中的属性 color: string; width: number; height: number; constructor(color: string, width: number, height: number) { this.color color; this.width width; this.height height; } // 必须实现接口中的方法 someMethod(): void { console.log(计算面积前的准备工作); } calculateAreaSize(): number { this.someMethod(); return this.width * this.height; } } // 使用示例 const rect new RectangleSize(红色, 10, 20); console.log(rect.calculateAreaSize()); // 输出面积2. 灵活实现属性使用 getter/setter接口声明属性时既可以写成简单字段也可以写成 getter/setter 对两者在接口层面是等价的。实现类可以根据需要灵活选择。typescriptinterface Style { color: string; // 声明方式一简单字段 // 等效于声明方式二getter/setter 对 // get color(): string // set color(x: string) } // 实现方式一直接用简单属性 class StyledRectangleSimple implements Style { color: string ; } // 实现方式二用 getter/setter 进行逻辑控制 class StyledRectangleAdvanced implements Style { private _color: string ; get color(): string { // 可以在获取前做一些处理比如格式化 return this._color.toUpperCase(); } set color(x: string) { // 可以在设置前做一些校验 if (x x.length 0) { this._color x; } } }3. 能力扩展接口继承一个接口可以继承另一个接口从而拥有父接口的全部能力并添加自己的新成员。实现子接口的类必须实现整个继承链上的所有成员。typescriptinterface Style { color: string; } // ExtendedStyle 继承了 Style并添加了 width 属性 interface ExtendedStyle extends Style { width: number; } // Cat 类必须实现 color 和 width 两个属性 class Cat implements ExtendedStyle { color: string; width: number; constructor(color: string, width: number) { this.color color; this.width width; } }4. 实战应用在 UI 开发中定义数据模型在 ArkUI 的声明式开发中Interface 最常用来约束数据对象的类型让代码更健壮IDE 提示也更友好。typescript// 定义粉丝列表项的数据结构 interface FansItem { avatar: Resource; // 头像资源 name: string; // 名称 title: string; // 标题 isFollow: boolean; // 是否已关注 } Entry Component struct TestPage { // 使用 Interface 约束数组类型 playerList: FansItem[] [ { name: 华为终端, avatar: $r(app.media.flower), title: 2024,二百万粉阿华继续冲压, isFollow: false }, { name: 黑马程序员, avatar: $r(app.media.flower), title: 领取课程源码资料, isFollow: true } ]; build() { List() { ForEach(this.playerList, (item: FansItem) { ListItem() { // ... 渲染 UI Text(item.name).fontSize(16) if (item.isFollow) { Button(已关注) } else { Button(回关) } } }) } } }5. 进阶补充Interface 与 Class 的对比理解这两者的区别能帮你做出更合理的设计决策特性Interface接口Class类角色定义类型约束的“契约/蓝图”创建具体对象的“模板/生产车间”内容只能包含属性和方法的类型声明可以包含属性、方法的具体实现代码实例化不能使用new实例化可以使用new创建对象实例关键词interfaceclass用implements实现接口要点总结class通过implements关键字来实现interface。实现类必须完全实现接口中声明的所有属性和方法。接口可以通过extends继承其他接口实现能力的组合与扩展。在 ArkUI 开发中常用 Interface 来约束组件状态或列表数据提升代码的可靠性。