鸿蒙app开发中 class类中的 访问修饰符和静态修饰符 等这些命名的含义 以及用法
·
在鸿蒙应用开发(基于 ArkTS/TypeScript)的class类中,访问修饰符和静态修饰符是控制类成员(属性、方法)行为的核心关键字,主要用于实现封装性、继承性和代码复用。以下是详细总结:
一、访问修饰符(控制成员的访问范围)
用于限制类的属性或方法在哪些场景下可被访问,确保代码封装性和安全性。
| 修饰符 | 含义 | 访问范围(可访问的位置) | 典型使用场景 |
|---|---|---|---|
public |
公共成员(默认修饰符,可省略) | 类内部、类外部、子类中均能访问 | 暴露类的公开接口(如对外提供的方法、需要外部读取的属性) |
private |
私有成员 | 仅在当前类内部可访问,类外部和子类均无法直接访问 | 隐藏类的内部实现细节(如内部状态变量、辅助方法),避免外部随意修改 |
protected |
受保护成员 | 仅在当前类内部和其子类中可访问,类外部无法访问 | 允许子类继承并复用父类的核心逻辑(如父类的基础配置、共享方法) |
示例:访问修饰符的区别
typescript
class Parent {
public publicProp: string = "public"; // 公共属性
private privateProp: string = "private"; // 私有属性
protected protectedProp: string = "protected"; // 受保护属性
public publicMethod() {
// 类内部可访问所有成员
console.log(this.publicProp, this.privateProp, this.protectedProp);
}
private privateMethod() { /* 仅类内部可用 */ }
protected protectedMethod() { /* 类内部和子类可用 */ }
}
class Child extends Parent {
useParentMembers() {
console.log(this.publicProp); // 允许(public)
// console.log(this.privateProp); // 报错(private:子类不可访问)
console.log(this.protectedProp); // 允许(protected)
this.publicMethod(); // 允许
// this.privateMethod(); // 报错
this.protectedMethod(); // 允许
}
}
const parent = new Parent();
parent.publicProp; // 允许(外部可访问public)
// parent.privateProp; // 报错(外部不可访问private)
// parent.protectedProp; // 报错(外部不可访问protected)
二、静态修饰符(static)
用于定义属于类本身的成员(而非类的实例),所有实例共享同一静态成员,无需创建实例即可调用。
| 修饰符 | 含义 | 特点与使用场景 |
|---|---|---|
static |
静态成员(属性或方法),属于类本身,不依赖实例 | 1. 工具方法(如数据格式化、校验逻辑)2. 全局常量(如配置键名、API 地址)3. 共享状态(如计数器、全局开关) |
示例:静态成员的使用
typescript
class ToolUtil {
// 静态常量:全局共享的配置
static readonly MAX_SIZE: number = 1024;
// 静态方法:工具函数,无需实例即可调用
static formatTime(time: number): string {
return `Time: ${time}`;
}
}
// 直接通过类名调用,无需创建实例
console.log(ToolUtil.MAX_SIZE); // 输出:1024
console.log(ToolUtil.formatTime(300)); // 输出:Time: 300
三、只读修饰符(readonly)
用于定义初始化后不可修改的成员,确保数据安全性。
| 修饰符 | 含义 | 适用场景 |
|---|---|---|
readonly |
只读成员,初始化后不可修改(类似常量),可修饰实例属性或静态属性 | 1. 固定配置(如版本号、常量参数)2. 避免实例属性被意外修改 |
示例:只读成员的使用
typescript
class Config {
readonly version: string = "1.0.0"; // 实例只读属性
static readonly APP_NAME: string = "MyApp"; // 静态只读属性
}
const config = new Config();
// config.version = "2.0.0"; // 报错:只读属性不可修改
// Config.APP_NAME = "NewApp"; // 报错:静态只读属性不可修改
四、常见组合修饰符
修饰符可以组合使用,形成更精确的访问控制:
| 组合修饰符 | 含义 | 示例场景 |
|---|---|---|
private static |
私有静态成员:仅类内部可访问的静态工具或常量 | 类内部使用的静态辅助方法、隐藏的全局配置 |
protected static |
受保护静态成员:类内部和子类可访问的静态成员 | 父类定义的、允许子类复用的静态工具方法 |
public static |
公共静态成员:全局可通过类名访问的静态成员(最常用) | 工具类的公开方法(如StorageUtil.get())、全局常量 |
readonly static |
静态只读成员:全局共享且不可修改的常量 | 应用级固定配置(如API_BASE_URL) |
示例:组合修饰符
typescript
class LogManager {
// 私有静态常量:仅类内部使用的日志标签
private static readonly LOG_TAG: string = "[AppLog]";
// 公共静态方法:全局可调用的日志工具
public static log(message: string) {
console.log(`${this.LOG_TAG} ${message}`); // 内部可访问私有静态成员
}
}
LogManager.log("test"); // 输出:[AppLog] test
// console.log(LogManager.LOG_TAG); // 报错:私有静态成员不可外部访问
总结
这些修饰符的核心作用是规范类成员的访问权限和生命周期:
- 访问修饰符(
public/private/protected)控制 “谁能访问”,实现封装和继承安全; - 静态修饰符(
static)控制 “成员属于类还是实例”,实现共享逻辑和工具方法; - 只读修饰符(
readonly)控制 “成员是否可修改”,保证数据稳定性。
在鸿蒙开发中,合理使用这些修饰符能使代码结构更清晰、逻辑更健壮,尤其在大型应用中可有效减少误操作和代码耦合。
更多推荐

所有评论(0)