深入理解类:ArkTS面向对象编程的核心概念

B站影视 港台电影 2025-04-18 06:25 1

摘要:在编程世界里,面向对象编程(OOP)是一种强大的编程范式,而类则是OOP的核心构建块。在ArkTS语言中,类的设计和使用对于构建复杂、可维护的应用程序至关重要。今天,我们就来深入探讨一下ArkTS中类的相关知识。

# 深入理解类:ArkTS面向对象编程的核心概念

在编程世界里,面向对象编程(OOP)是一种强大的编程范式,而类则是OOP的核心构建块。在ArkTS语言中,类的设计和使用对于构建复杂、可维护的应用程序至关重要。今天,我们就来深入探讨一下ArkTS中类的相关知识。

## 类的基础:声明与实例化

在ArkTS里,类声明引入新类型,定义字段、方法和构造函数。以`Person`类为例:

```typescript

class Person {

name: string = '';

surname: string = '';

constructor(n: string, sn: string) {

this.name = n;

this.surname = sn;

}

fullName: string {

return this.name + ' ' + this.surname;

}

}

```

定义好类后,可用`new`关键字创建实例,像`let p = new Person('John', 'Smith');` ,随后就能调用实例方法,比如`console.log(p.fullName);` 。此外,还能用对象字面量创建实例,不过这需要在可推导类型的上下文中进行。

## 类的成员:字段、方法与构造函数

### 字段:实例与静态的区别

字段是类中声明的变量,分为实例字段和静态字段。实例字段存在于每个类实例上,每个实例都有自己的一套。比如在`Person`类中:

```typescript

class Person {

name: string = '';

age: number = 0;

constructor(n: string, a: number) {

this.name = n;

this.age = a;

}

getName: string {

return this.name;

}

}

```

通过实例访问实例字段,像`let p1 = new Person('Alice', 25); p1.name;` 。而静态字段用`static`关键字声明,属于类本身,所有实例共享。比如统计`Person`类实例数量时:

```typescript

class Person {

static numberOfPersons = 0;

constructor {

Person.numberOfPersons++;

}

}

Person.numberOfPersons;

```

同时,ArkTS要求字段在声明或构造函数中显式初始化,以避免运行时错误。

### 方法:实例与静态的不同行为

类的方法也有实例方法和静态方法之分。实例方法能访问实例字段和静态字段,像计算矩形面积的`RectangleSize`类:

```typescript

class RectangleSize {

private height: number = 0;

private width: number = 0;

constructor(height: number, width: number) {

this.height = height;

this.width = width;

}

calculatearea: number {

return this.height * this.width;

}

}

let square = new RectangleSize(10, 10);

square.calculateArea;

```

静态方法用`static`声明,只能访问静态字段,通过类名调用,用于定义类整体的公共行为:

```typescript

class Cl {

static staticMethod: string {

return 'this is a static method.';

}

}

console.log(Cl.staticMethod);

```

### 构造函数:对象初始化的关键

构造函数用于初始化对象状态。若未定义构造函数,会自动生成默认构造函数。派生类构造函数可用`super`调用父类构造函数:

```typescript

class RectangleSize {

constructor(width: number, height: number) {

//...

}

}

class Square extends RectangleSize {

constructor(side: number) {

super(side, side);

}

}

```

构造函数也能重载签名,为不同的初始化方式提供支持。

## 类的进阶特性:继承、方法重写与可见性修饰符

### 继承:代码复用的利器

继承让一个类能继承另一个类的字段和方法。例如:

```typescript

class Person {

name: string = '';

private _age = 0;

get age: number {

return this._age;

}

}

class Employee extends Person {

salary: number = 0;

calculateTaxes: number {

return this.salary * 0.42;

}

}

```

子类继承父类成员,但不继承构造函数,还能新增或覆盖父类方法。

### 方法重写:灵活定制行为

子类可重写父类方法,重写方法需保持相同参数类型和相同或派生的返回类型。如:

```typescript

class RectangleSize {

area: number {

return 0;

}

}

class Square extends RectangleSize {

private side: number = 0;

area: number {

return this.side * this.side;

}

}

```

### 可见性修饰符:控制访问权限

可见性修饰符有`private`、`protected`和`public`。`public`是默认修饰符,成员在任何可访问类的地方都可见;`private`修饰的成员只能在类内部访问;`protected`修饰的成员在派生类中也可访问。例如:

```typescript

class C {

public x: string = '';

private y: string = '';

set_y (new_y: string) {

this.y = new_y;

}

}

let c = new C;

c.x = 'a';

c.y = 'b';

```

```typescript

class Base {

protected x: string = '';

}

class Derived extends Base {

foo {

this.x = 'a';

this.y = 'b';

}

}

```

## 其他重要概念:抽象类、对象字面量

### 抽象类:定义通用概念

抽象类用`abstract`修饰,用于表示一组具体概念的共有概念,不能直接实例化。例如:

```typescript

abstract class X {

field: number;

constructor(p: number) {

this.field = p;

}

}

let x = new X(666)

```

抽象类的子类可以是抽象类或非抽象类,非抽象子类可实例化。抽象类中还能定义抽象方法,抽象方法只有声明没有实现,且只能在抽象类中存在。

### 对象字面量:便捷的实例创建方式

对象字面量可创建类实例并提供初始值,在特定上下文能替代`new`表达式。例如:

```typescript

class C {

n: number = 0;

s: string = '';

}

let c: C = {n: 42, s: 'foo'};

```

对于`Record`类型,对象字面量也常用于初始化:

```typescript

let map: Record = {

'John': 25,

'Mary': 21,

}

```

ArkTS中的类为开发者提供了丰富的功能和强大的编程能力。通过合理运用类的各种特性,我们可以编写出结构清晰、易于维护和扩展的代码。无论是开发小型应用还是大型项目,对类的深入理解和熟练运用都是至关重要的。希望这篇博客能帮助大家更好地掌握ArkTS中类的知识,在编程道路上更进一步!

来源:凌菲教育

相关推荐