🌟 HarmonyOS NEXT:构造器与面向对象全攻略 🌟

简介: 本文深入解析HarmonyOS NEXT中的ArkTS面向对象编程精髓,涵盖构造器四式(基础、继承、重载、默认)、访问控制三剑客(public、private、protected)、对象字面量妙用、抽象类与接口对比、泛型黑科技等内容。同时,详细讲解空安全四重防护、模块系统全解析及this关键字生存指南,助你构建高效、安全的代码体系。通过最佳实践速查表和开发者备忘录,让你轻松掌握ArkTS开发技巧,打造稳健的HarmonyOS应用!

🌟 HarmonyOS NEXT:构造器与面向对象全攻略 🌟

##Harmony OS Next ##Ark Ts ##教育

本文适用于教育科普行业进行学习,有错误之处请指出我会修改。


🏗️ 构造器四式

1️⃣ 基础构造器

class Point {
  x: number = 0;  // 自动初始化
  y: number = 0;

  constructor(x: number, y: number) {
    this.x = x;
    this.y = y;
  }
}
const p = new Point(3, 4); // 坐标(3,4)

2️⃣ 继承构造器(super必杀技)

class Animal {
  constructor(public name: string) {}  // 参数属性简写
}

class Cat extends Animal {
  constructor(name: string) {
    super(name);  // 🚨 必须第一行!
  }
}

3️⃣ 重载构造器(智能适配)

class Config {
  constructor(path: string);        // 签名1
  constructor(settings: object);    // 签名2
  constructor(value: string | object) {  // 实现
    // 初始化逻辑
  }
}

new Config('app.json');   // 调用签名1
new Config({ theme: dark }); // 调用签名2

4️⃣ 默认构造器(懒人福音)

class DefaultDemo {
  value = '默认值';
}

const demo = new DefaultDemo();  // 自动初始化

🔒 访问控制三剑客

修饰符 可见范围 典型应用场景
public 随处可访问 (默认) 公开API
private 仅本类内 内部状态管理
protected 本类+子类 继承体系共享逻辑
class BankAccount {
  private _balance = 0;  // 私有财产

  public get balance() {  // 公开查询
    return this._balance; 
  }
}

🎨 对象字面量妙用

快速实例化

class User {
  name!: string;
  age!: number;
}

// 直接赋值超方便!
const user: User = {
  name: '小明',
  age: 18
};

Record类型神器

// 创建类型安全的字典
const studentScores: Record<string, number> = {
  '张三': 95,
  '李四': 88
};

// 自动提示key和value类型!
studentScores['王五'] = 92;

🧩 抽象类 vs 接口

特性 抽象类 接口
实例化 ❌ 不能 ❌ 不能
方法实现 ✅ 可以有 ❌ 只能声明
构造函数 ✅ 有 ❌ 无
多继承 ❌ 单继承 ✅ 多实现
典型应用 共享基础逻辑 定义行为契约
// 抽象类示例
abstract class Shape {
  abstract area(): number;  // 抽象方法
}

// 接口示例
interface Drawable {
  draw(): void;
}

🌐 泛型黑科技

基础泛型类

class SmartBox<T> {
  constructor(public content: T) {}

  getContent(): T {
    return this.content;
  }
}

// 使用示例
const numBox = new SmartBox<number>(42);
const strBox = new SmartBox('Hello');  // 自动类型推断

泛型约束(类型安检)

interface HasLength {
  length: number;
}

function logLength<T extends HasLength>(item: T) {
  console.log(item.length);  // 安全访问length属性
}

logLength('文本');  // ✅ 3
logLength([1,2,3]); // ✅ 3

泛型默认值(贴心备胎)

class Pagination<T = string> {
  data: T[] = [];
}

const page1 = new Pagination();     // 默认string类型
const page2 = new Pagination<number>(); // 指定number类型

🚀 最佳实践流程图

定义类结构 → 选择访问修饰符 → 设计构造器
    ↓
继承体系规划 → 使用抽象类/接口 → 实现多态
    ↓
引入泛型 → 添加约束 → 提升代码复用

🎉 现在就去打造你的ArkTS对象世界吧!
遇到面向对象难题随时回来查秘籍~ 😘

🌟 空安全与模块系统完全指南 🌟


🚨 空安全四重防护

1️⃣ 默认非空(安全卫士🛡️)

let name: string = null;    // ❌ 编译报错
let age?: number = null;   // ✅ 合法声明

2️⃣ 非空断言(危险操作⚠️)

class User {
  name!: string;  // 🚀 断言非空
}

function getUsername(user: User | null) {
  return user!.name;  // 运行时可能崩溃!
}

3️⃣ 空值合并(优雅备胎✨)

const config = {
  timeout: null ?? 3000  // 超时默认为3秒
};

4️⃣ 可选链(安全导航🚦)

const user = {
  profile?: {
    social?: {
      wechat?: '小明'
    }
  }
};

console.log(user.profile?.social?.wechat); // 安全访问

📦 模块系统全解析

静态导入(常规操作)

// 方式一:整体导入
import * as Utils from './math';

// 方式二:精准导入
import { PI, calculateArea } from './math';

动态导入(按需加载⚡)

// 异步加载提升性能
async function loadModule() {
  const { encrypt } = await import('./crypto');
  encrypt('data');
}

HarmonyOS SDK接入

// 方式一:精准导入Kit
import { UIAbility } from '@kit.AbilityKit';

// 方式二:批量导入
import * as AbilityKit from '@kit.AbilityKit';

🔑 关键字this生存指南

正确用法(类方法中✅)

class Counter {
  count = 0;

  increment() {
    this.count++;  // ✅ 指向实例
  }
}

禁用场景(踩雷警告💣)

错误场景 示例
静态方法中使用 static reset() { this.count = 0 }
函数内部使用 function log() { console.log(this) }
未绑定回调函数 button.onClick = this.handleClick

解决方案(绑定技巧🔗)

// 箭头函数自动绑定
class Timer {
  start = () => {
    console.log(this);  // ✅ 始终指向实例
  }
}

// 显式绑定
const boundHandler = this.handler.bind(this);

🎯 最佳实践速查表

场景 推荐方案 代码示例
可选属性 联合类型 `name?: string null`
模块按需加载 动态import await import('./heavy')
回调函数绑定 箭头函数 onClick = () => {...}
复杂对象访问 可选链 obj?.prop?.subProp

💡 开发者备忘录

  1. 空安全第一:始终初始化变量,善用???.
  2. 模块化思维:按功能拆分模块,控制导入范围
  3. this陷阱:类方法外避免使用,回调记得绑定
  4. 动态加载:超过50KB的模块建议动态导入
// 完美代码示例
class SafeLoader {
  private cache?: Map<string, string>;

  async init() {
    const { Cache } = await import('./cache');
    this.cache = new Cache() ?? null;
  }

  getData(key: string) {
    return this.cache?.get(key) ?? 'default';
  }
}

🚀 掌握这些技巧,轻松驾驭ArkTS开发!
遇到问题记得回来查攻略哦~ 😘

目录
相关文章
|
21天前
|
容器
鸿蒙Next仓颉语言开发实战教程:店铺详情页
本文介绍了使用仓颉语言开发HarmonyOS应用中的店铺详情页实现方法,重点讲解了List容器的使用技巧,包括如何布局、设置圆角及处理列表项分组等内容,并附有完整代码示例。
|
编译器
鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(2/3)
本文介绍在三层架构中实现模块依赖的步骤。首先在产品定制层(features)的oh-package.json5文件中导入共享包依赖,如"basic":"file:../../commons/basic"。然后在产品层(products)的配置文件中同时导入公共能力层和产品定制层的依赖,示例展示了如何添加"basic"和"my"两个依赖项。通过这些配置,三层架构的各模块之间建立了完整的依赖关系。
85 0
鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(2/3)
|
9天前
|
缓存 移动开发 网络协议
纯血鸿蒙NEXT即时通讯/IM系统:RinbowTalk正式发布,全源码、纯ArkTS编写
RainbowTalk是一套基于MobileIMSDK的产品级鸿蒙NEXT端IM系统,目前已正式发布。纯ArkTS、从零编写,无套壳、没走捷径,每一行代码都够“纯”(详见:《RainbowTalk详细介绍》)。 MobileIMSDK是一整套开源IM即时通讯框架,历经10年,超轻量级、高度提炼,一套API优雅支持 UDP 、TCP 、WebSocket 三种协议,支持 iOS、Android、H5、标准Java、小程序、Uniapp、鸿蒙NEXT,服务端基于Netty编写。
42 1
|
19天前
|
开发者 容器
鸿蒙Next仓颉语言开发实战教程:设置页面
本教程介绍了仓颉语言商城应用设置页面的开发,重点讲解了List容器的使用。页面分为三组列表内容,第一组直接使用ListItem实现,后两组通过ListItemGroup及自定义组件setrow完成布局。教程还演示了如何通过自定义组件提升代码复用性,并介绍了分割线divider的设置方法,帮助开发者高效构建美观的设置界面。
|
19天前
鸿蒙Next仓颉语言开发实战教程:订单列表
本文介绍了使用仓颉语言开发HarmonyOS商城应用的订单列表页实现方法,包含导航栏、订单类型切换和订单列表展示三部分。通过代码示例讲解了布局技巧与组件使用,适合初学者学习参考。
|
19天前
鸿蒙Next仓颉语言开发实战教程:下拉刷新和上拉加载更多
本文介绍了在仓颉开发语言中实现下拉刷新和上拉加载更多的方法。通过Refresh组件实现下拉刷新,结合Timer模拟网络加载;并通过监听列表滚动事件,在列表底部添加加载动画实现上拉加载更多功能。代码示例清晰实用,适用于商城等含列表交互的移动应用开发。
|
2天前
|
移动开发 前端开发 JavaScript
鸿蒙NEXT时代你所不知道的全平台跨端框架:CMP、Kuikly、Lynx、uni-app x等
本篇基于当前各大活跃的跨端框架的现状,对比当前它们的情况和未来的可能,帮助你在选择框架时更好理解它们的特点和差异。
37 0
|
1月前
|
测试技术 开发工具 开发者
HarmonyOS Next快速入门:了解项目工程目录结构
本教程旨在帮助开发者快速上手HarmonyOS应用开发,涵盖从环境搭建到工程创建的全流程。通过DevEco Studio创建首个项目时,选择“Application”与“Empty Ability”,配置项目名称、包名、保存路径等关键信息后完成创建。代码示例展示了基本UI组件的使用,如`Hello World`文本显示与交互逻辑。此外,详细解析了工程目录结构,包括AppScope自动生成规则、主模块(entry)的功能划分、依赖配置文件(oh-package.json5)的作用,以及app.json5中包名、版本号等全局配置项的含义。
74 5
|
19天前
|
存储 开发者
鸿蒙Next仓颉开发语言中的数据类型总结分享
仓颉语言数据类型包括多种数字类型(Int、Float)、字符串(String)、数组(Array、ArrayList、ObservedArrayList)及HashMap。数字类型区分长度和精度,数组支持固定与动态操作,HashMap用于存储键值对。适合开发者快速掌握仓颉基础数据结构。#仓颉 #HarmonyOS
|
19天前
详解鸿蒙Next仓颉开发语言中的全屏模式
仓颉开发语言实现全屏模式教程:默认非全屏,需手动设置沉浸模式以占满屏幕。通过`setWindowLayoutFullScreen`开启全屏,并利用`getWindowAvoidArea`获取摄像头与导航条区域高度,结合AppStorage保存尺寸,适配界面布局,避免内容被遮挡。附屏幕尺寸获取方法及单位说明。