鸿蒙操作系统(HarmonyOS)是由华为技术有限公司开发的面向未来、面向全场景的分布式操作系统。它旨在为不同的设备提供统一的操作系统和用户体验,支持各种物联网设备的无缝协作。ArkTS是鸿蒙操作系统中用于应用程序开发的一种新型编程语言,它融合了TypeScript的功能特性和Java/Kotlin等面向对象语言的语法特点,专门为鸿蒙的应用程序开发而设计。

类与接口在鸿蒙中的重要性

类与接口是面向对象编程(OOP)的核心概念,在鸿蒙应用开发中扮演着至关重要的角色。通过使用类与接口,开发者可以创建结构良好、易于维护且可扩展的代码。类是创建对象的蓝图,它们定义了一组属性和方法;而接口则是一种抽象类型,它规定了实现该接口的类必须提供的行为(即方法),但不提供具体的实现细节。接口有助于提高代码的灵活性和复用性,使得不同类之间可以相互通信和互操作。

定义一个简单的类

在鸿蒙应用中定义一个类,我们首先需要了解其基本结构。以下是一个简单的学生类示例:

```typescript

class Student {

// 属性

private name: string;

private age: number;

// 构造函数

constructor(name: string, age: number) {

this.name = name;

this.age = age;

}

// 方法

public introduce(): string {

return `Hello, my name is ${this.name} and I'm ${this.age} years old.`;

}

}

// 使用类创建对象

const student1 = new Student('Alice', 20);

console.log(student1.introduce());

```

继承与多态

鸿蒙应用开发中,继承允许一个类继承另一个类的属性和方法,从而促进代码复用。子类可以通过`extends`关键字继承父类,并可以重写父类的方法来实现多态性。下面的例子展示了如何创建一个继承自`Student`类的`GraduateStudent`类:

```typescript

class GraduateStudent extends Student {

private thesisTitle: string;

constructor(name: string, age: number, thesisTitle: string) {

super(name, age); // 调用父类构造函数

this.thesisTitle = thesisTitle;

}

// 重写父类的方法

public introduce(): string {

return `${super.introduce()} My thesis title is "${this.thesisTitle}".`;

}

}

const graduateStudent1 = new GraduateStudent('Bob', 25, 'The Impact of Technology on Society');

console.log(graduateStudent1.introduce());

```

定义接口

接口定义了对象的行为,但并不提供这些行为的具体实现。在鸿蒙中,接口可以帮助我们确保类遵循特定的契约。以下是如何定义和实现一个名为`Speaker`的接口的例子:

```typescript

interface Speaker {

speak(): void;

}

class Person implements Speaker {

private name: string;

constructor(name: string) {

this.name = name;

}

// 实现接口的方法

speak(): void {

console.log(`${this.name} says hello.`);

}

}

const person1 = new Person('Charlie');

person1.speak();

```

接口的组合与继承

接口不仅可以被类实现,还可以互相继承,或者组合多个接口。这允许我们创建更复杂的行为契约。例如:

```typescript

interface Writer {

write(): void;

}

interface Reader {

read(): void;

}

// 继承多个接口

interface Author extends Writer, Reader {

publish(): void;

}

class BookAuthor implements Author {

private name: string;

constructor(name: string) {

this.name = name;

}

write(): void {

console.log(`${this.name} is writing a book.`);

}

read(): void {

console.log(`${this.name} is reading reviews.`);

}

publish(): void {

console.log(`${this.name} has published a new book.`);

}

}

const author1 = new BookAuthor('David');

author1.write();

author1.read();

author1.publish();

```

抽象类

除了普通类之外,鸿蒙还支持抽象类。抽象类不能直接实例化,但是它可以包含抽象方法,这些方法必须在任何非抽象子类中被实现。下面是一个关于动物的抽象类的例子:

```typescript

abstract class Animal {

protected name: string;

constructor(name: string) {

this.name = name;

}

// 抽象方法

abstract makeSound(): void;

// 普通方法

move(): void {

console.log(`${this.name} is moving.`);

}

}

class Dog extends Animal {

makeSound(): void {

console.log(`${this.name} barks.`);

}

}

const dog1 = new Dog('Rex');

dog1.makeSound();

dog1.move();

```

访问修饰符

访问修饰符控制类成员的可见性。鸿蒙支持三种访问修饰符:`public`、`private`和`protected`。默认情况下,类成员是`public`的,这意味着它们可以在任何地方被访问。`private`成员只能在声明它们的类内部访问,而`protected`成员则可以在类及其子类中访问。

```typescript

class Vehicle {

public type: string;

private manufacturer: string;

protected modelYear: number;

constructor(type: string, manufacturer: string, modelYear: number) {

this.type = type;

this.manufacturer = manufacturer;

this.modelYear = modelYear;

}

// 可以访问私有成员

getManufacturer(): string {

return this.manufacturer;

}

}

class Car extends Vehicle {

constructor(manufacturer: string, modelYear: number) {

super('Car', manufacturer, modelYear);

}

// 可以访问保护成员

getModelYear(): number {

return this.modelYear;

}

}

const car1 = new Car('Toyota', 2023);

console.log(car1.type); // 公共成员可以直接访问

console.log(car1.getManufacturer()); // 私有成员通过公共方法访问

console.log(car1.getModelYear()); // 保护成员通过公共方法访问

```

静态成员

静态成员属于类本身而不是类的实例。这意味着即使没有创建类的实例,也可以调用静态成员。静态成员包括静态属性和静态方法。下面是一个静态成员的例子:

```typescript

class MathUtils {

// 静态属性

static PI: number = 3.14159;

// 静态方法

static calculateCircleArea(radius: number): number {

return this.PI * radius * radius;

}

}

// 不需要实例化即可调用静态成员

console.log(MathUtils.PI);

console.log(MathUtils.calculateCircleArea(5));

Logo

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

更多推荐