ArkTS面向对象编程:类、对象与继承 原创
头像 ●VON 2025-11-21 23:44:19    发布
4794 浏览 140 点赞 0 收藏

前言

在掌握ArkTS基础语法之后,进一步学习其面向对象编程(OOP)能力,是构建结构清晰、可维护性强的鸿蒙应用的关键一步。ArkTS作为TypeScript的超集,完整支持现代面向对象特性,包括类(Class)、对象(Object)、封装、继承和多态。这些特性不仅让代码更模块化,还能显著提升大型项目的开发效率。

本文将系统讲解ArkTS中的面向对象核心概念,并结合鸿蒙开发中的实际场景——如自定义UI组件、业务模型封装等——帮助你理解如何在真实项目中运用OOP思想。



一、类与对象:封装数据与行为

在ArkTS中,类(Class) 是创建对象的模板,它将数据(属性)和操作数据的方法封装在一起。

1. 定义一个类

class User {
  // 属性
  name: string;
  age: number;

  // 构造函数:初始化对象
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  // 方法
  introduce(): string {
    return `大家好,我是${this.name},今年${this.age}岁。`;
  }
}

2. 创建对象并调用方法

const user1 = new User("张三", 28);
console.log(user1.introduce()); // 输出:大家好,我是张三,今年28岁。
💡 提示:在鸿蒙开发中,你可以用User类来封装用户信息,用于登录状态管理、个人中心展示等场景。


二、构造函数与属性初始化

ArkTS支持在构造函数中使用参数属性(Parameter Properties) 简化代码:

class Product {
  constructor(
    public id: number,
    public name: string,
    private price: number // private 表示仅类内部可访问
  ) {}

  getPrice(): number {
    return this.price;
  }
}

const phone = new Product(1001, "智能手机", 3999);
console.log(phone.name);        // ✅ 可访问
// console.log(phone.price);    // ❌ 编译错误!price 是私有的
console.log(phone.getPrice());  // ✅ 通过方法访问

这种写法将属性声明与赋值合并,代码更简洁。



三、继承:代码复用的核心机制

继承(Inheritance) 允许一个类(子类)基于另一个类(父类)进行扩展,复用已有功能并添加新特性。

示例:通用设备类 → 手机类

// 父类:通用设备
class Device {
  protected brand: string;

  constructor(brand: string) {
    this.brand = brand;
  }

  turnOn(): void {
    console.log(`${this.brand} 设备已开机`);
  }
}

// 子类:手机
class Smartphone extends Device {
  private os: string;

  constructor(brand: string, os: string) {
    super(brand); // 调用父类构造函数
    this.os = os;
  }

  // 重写父类方法(多态)
  turnOn(): void {
    console.log(`${this.brand} 手机运行 ${this.os} 系统,正在启动...`);
  }

  makeCall(contact: string): void {
    console.log(`正在拨打 ${contact}...`);
  }
}

使用继承后的类

const myPhone = new Smartphone("华为", "HarmonyOS");
myPhone.turnOn();     // 输出:华为 手机运行 HarmonyOS 系统,正在启动...
myPhone.makeCall("妈妈"); // 输出:正在拨打 妈妈...
🌟 鸿蒙场景应用:在开发多端应用时,可定义通用BaseComponent类,再派生出PhoneComponent、WatchComponent等,实现设备适配逻辑的复用。


四、多态:同一接口,不同实现

多态(Polymorphism) 指的是子类可以以自己的方式实现父类的方法。这使得我们可以编写更通用的代码。

function startDevice(device: Device): void {
  device.turnOn(); // 实际调用哪个 turnOn?取决于传入对象的真实类型
}

const tablet = new Device("华为");
const phone = new Smartphone("荣耀", "HarmonyOS");

startDevice(tablet); // 华为 设备已开机
startDevice(phone);  // 荣耀 手机运行 HarmonyOS 系统,正在启动...

这种设计让代码更具扩展性——未来新增SmartTV类,无需修改startDevice函数。



五、在鸿蒙开发中实践:自定义UI组件类

虽然ArkUI主要使用装饰器(如@Component)定义组件,但在复杂业务逻辑中,我们常通过类来封装状态或行为。

示例:封装一个“计数器逻辑类”

class Counter {
  private _value: number = 0;

  get value(): number {
    return this._value;
  }

  increment(step: number = 1): void {
    this._value += step;
  }

  reset(): void {
    this._value = 0;
  }
}

在页面中使用:

import { Component, Text, Button, Column } from '@ohos/arkui';

@Component
struct CounterPage {
  private counter: Counter = new Counter();

  build() {
    Column() {
      Text(`当前计数: ${this.counter.value}`)
        .fontSize(24)

      Button(' +1 ')
        .onClick(() => {
          this.counter.increment();
        })

      Button(' 重置 ')
        .onClick(() => {
          this.counter.reset();
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

通过将计数逻辑封装在Counter类中,页面组件只负责UI渲染和事件绑定,实现了关注点分离,便于测试和维护。



六、访问修饰符:控制可见性

ArkTS支持三种访问修饰符:

  • public(默认):任何地方可访问;
  • protected:仅类自身及子类可访问;
  • private:仅类内部可访问。

合理使用这些修饰符,能有效防止外部代码误操作内部状态,提升代码健壮性。



七、总结

面向对象编程是ArkTS乃至现代软件开发的核心范式。通过本篇学习,你应该已经掌握:

  • 如何定义类与创建对象;
  • 构造函数与属性初始化技巧;
  • 继承与方法重写的使用;
  • 多态带来的灵活性;
  • 在鸿蒙项目中如何用类封装业务逻辑。
✅ 建议实践: 定义一个TodoItem类,包含标题、完成状态、创建时间; 创建TodoList类,管理多个TodoItem,提供添加、删除、标记完成等方法; 在页面中集成该逻辑,构建一个简易待办事项应用。

掌握这些技能后,你将能写出更专业、更易维护的鸿蒙应用代码。下一步,我们将深入ArkUI声明式语法,把OOP能力与UI开发深度融合!

©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
OpenHarmony

暂无评论数据

发布

头像

●VON

HarmonyOS应用开发者初级工程师、影刀初级RPA工程师、YashanDB数据库V23.2认证管理员、金仓数据库认证专员等技能证书,主持参与省级团队赛9项,个人赛2项均获得省级荣誉,其中2025年作为负责人带领团队斩获“挑战杯”全国大学生课外学术科技作品竞赛河南省省级一等奖。

26

帖子

0

提问

257

粉丝

关注
最新发布

鸿蒙实战:打造跨设备音乐播放器

2025-11-25 16:23:11    发布
热门推荐
地址:北京市朝阳区北三环东路三元桥曙光西里甲1号第三置业A座1508室 商务内容合作QQ:2291221 电话:13391790444或(010)62178877
版权所有:电脑商情信息服务集团 北京赢邦策略咨询有限责任公司
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,我司致力于保护作者版权,如有侵权,请与我司联系删除
京ICP备:2022009079号-2
京公网安备:11010502051901号
ICP证:京B2-20230255