第3章:面向对象编程
类与对象
3.1.1 类的基本概念
在ArkTS中,**类(Class)**是面向对象编程的核心概念,用于描述具有相同属性和行为的对象集合。一个类可以包含:
- 属性(成员变量):描述对象的状态
- 方法(成员函数):定义对象的行为
- 构造函数:用于初始化对象
// 定义一个Person类
class Person {
// 成员变量
name: string
age: number
// 构造函数
constructor(name: string, age: number) {
this.name = name
this.age = age
}
// 成员方法
introduce(): void {
console.log(`Hello, I'm ${this.name}, ${this.age} years old.`)
}
}
3.1.2 对象的创建与使用
**对象(Object)**是类的实例化结果,通过new关键字创建:
// 创建Person对象
let person1 = new Person("Alice", 25)
let person2 = new Person("Bob", 30)
// 访问对象属性和方法
console.log(person1.name) // 输出: Alice
person2.introduce() // 输出: Hello, I'm Bob, 30 years old.
3.1.3 访问修饰符
ArkTS支持三种访问控制修饰符:
- public(默认):公开访问
- private:仅类内部可访问
- protected:类内部及子类可访问
class BankAccount {
private balance: number = 0
public deposit(amount: number): void {
if (amount > 0) {
this.balance += amount
}
}
public getBalance(): number {
return this.balance
}
}
3.1.4 静态成员
使用static关键字定义属于类本身的成员(而非实例成员):
class MathUtils {
static PI: number = 3.14159
static circleArea(radius: number): number {
return this.PI * radius * radius
}
}
// 直接通过类名访问
console.log(MathUtils.PI) // 3.14159
console.log(MathUtils.circleArea(5)) // 78.53975
3.1.5 最佳实践
- 单一职责原则:每个类应该只有一个职责
- 合理使用访问控制:优先使用private保护内部状态
- 避免过度使用静态成员:静态成员会破坏封装性
- 命名规范:类名使用PascalCase,方法名使用camelCase
3.1.6 常见问题
Q:ArkTS中类与TypeScript类有什么区别? A:ArkTS的类语法基本与TypeScript一致,但在UI组件类中会有额外的装饰器(如@Component)和生命周期方法。
Q:什么时候应该使用类而不是接口? A:当需要实现具体行为和维护状态时使用类,当只需要定义契约时使用接口(将在3.3章详细介绍)。
