鸿蒙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
)控制 “成员是否可修改”,保证数据稳定性。
在鸿蒙开发中,合理使用这些修饰符能使代码结构更清晰、逻辑更健壮,尤其在大型应用中可有效减少误操作和代码耦合。