在鸿蒙应用开发(基于 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)控制 “成员是否可修改”,保证数据稳定性。

在鸿蒙开发中,合理使用这些修饰符能使代码结构更清晰、逻辑更健壮,尤其在大型应用中可有效减少误操作和代码耦合。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐