当前位置: 首页 > article >正文

深入理解类: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 = '';

    private y: 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<string, number> = {

    'John': 25,

    'Mary': 21,

}

```

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

相关文章:

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

# 深入理解类&#xff1a;ArkTS面向对象编程的核心概念 在编程世界里&#xff0c;面向对象编程&#xff08;OOP&#xff09;是一种强大的编程范式&#xff0c;而类则是OOP的核心构建块。在ArkTS语言中&#xff0c;类的设计和使用对于构建复杂、可维护的应用程序至关重要。今天…...

AI 驱动下的后端开发架构革命:从智能协同体系

AI 驱动下的后端开发架构革命&#xff1a;从智能协同体系 一、引言&#xff1a;AI 重构后端开发范式 在 2025 年的企业级技术演进中&#xff0c;人工智能正从辅助工具升级为核心架构要素。根据 Gartner《2025 智能技术栈成熟度报告》&#xff0c;传统 "人力编码 硬规则…...

vue3 Ts axios 封装

vue3 Ts axios 封装 axios的封装 import axios, { AxiosError, AxiosInstance, InternalAxiosRequestConfig, AxiosResponse, AxiosRequestConfig, AxiosHeaders } from axios import qs from qs import { config } from ./config import { ElMessage } from element-plus// …...

CyberAgentAILab 开源数字人项目TANGO,heygen的开源版来了~

简介 TANGO 是 CyberAgentAILab 开源的一项前沿研究成果&#xff0c;其初衷在于探索高效生成模型在实际应用场景中的表现。项目诞生于 CyberAgent 在整合创意与人工智能的实践中&#xff0c;旨在为数字内容生成、交互和实时渲染等领域提供一个高性能、模块化、可扩展的解决方案…...

ROS ROS2 机器人深度相机激光雷达多传感器标定工具箱入门教程(一)

系列文章目录 目录 系列文章目录 前言 一、安装 1.1 ROS 2 官方软件包 二、教程 2.1 标定配置器 2.1.1 机器人选项 2.1.2.1 外参相机-激光雷达标定 2.1.2.2 外参激光雷达-激光雷达标定 2.1.2.3 外参相机参照标定 2.1.2.4 外参激光雷达-参考标定 2.2 外参照相机-激…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(6):ながら 一边。。一边

日语学习-日语知识点小记-构建基础-JLPT-N4阶段&#xff08;6&#xff09;&#xff1a;ながら 一边。。一边 1、前言&#xff08;1&#xff09;情况说明&#xff08;2&#xff09;工程师的信仰 2、知识点&#xff08;1&#xff09;ながら1&#xff09;一边。。一边2&#xff0…...

从EOF到REOF:如何用旋转经验正交函数提升时空数据分析精度?

目录 1. 基本概念与原理2. 应用场景3. 与传统EOF的区别4. 技术实现5. 其他领域中的“REOF”参考资料 REOF 的输入是多个地区在不同时间的气候数据&#xff08;如温度或降雨量&#xff09;&#xff0c;它的作用是通过旋转计算找出这些数据中最主要的变化规律&#xff0c;输出则是…...

【HDFS入门】HDFS与Hadoop生态的深度集成:与YARN、MapReduce和Hive的协同工作原理

目录 引言 1 HDFS核心架构回顾 2 HDFS与YARN的集成 3 HDFS与MapReduce的协同 4 HDFS与Hive的集成 4.1 Hive架构与HDFS交互 4.2 Hive数据组织 4.3 Hive查询执行流程 5 HDFS在生态系统中的核心作用 6 性能优化实践 7 总结 引言 在大数据领域&#xff0c;Hadoop生态系统…...

用 AI 十天开发小程序:探秘 “幸运塔塔屋” 之 “解惑指南书” 功能

在当今软件开发领域&#xff0c;AI 技术正以前所未有的速度改变着我们的开发方式。我仅用十天时间&#xff0c;借助 AI 成功开发出 “幸运塔塔屋” 小程序&#xff0c;其中 “解惑指南书” 功能别具一格。今天&#xff0c;就为大家详细剖析这个功能从构思到落地的全过程。 十天…...

直流电源基本原理

整流电路 在构建整流电路时&#xff0c;要选择合适参数的二极管 If是二极管能够通过电流的能力&#xff0c;也是最大整流的平均电流。 还要考虑二极管的反向截至电压。 脉动系数电压交流幅值/直流平均电压&#xff08;越小越好&#xff09; 三相整流电路优点&#xff1a; …...

osu ai 论文笔记 DQN

e https://theses.liacs.nl/pdf/2019-2020-SteeJvander.pdf Creating an AI for the Rhytm Game osu! 20年的论文 用监督学习训练移动模型100首歌能达到95准确率 点击模型用DQN两千首歌65准确率 V抖用的居然不是强化学习&#xff1f; 5,6星打96准确度还是有的东西的 这是5.…...

MapReduce实验:分析和编写WordCount程序(对文本进行查重)

实验环境&#xff1a;已经部署好的Hadoop环境 Hadoop安装、配置与管理_centos hadoop安装-CSDN博客 实验目的&#xff1a;对输入文件统计单词频率 实验过程&#xff1a; 1、准备文件 test.txt文件&#xff0c;它是你需要准备的原始数据文件&#xff0c;存放在你的 Linux 系…...

Windows Acrobat Pro DC-v2025.001.20435-x64-CN-Portable便携版

Windows Acrobat Pro 链接&#xff1a;https://pan.xunlei.com/s/VOO1nMjQ1Qf53dyISGne0c_9A1?pwdsfgn# Acrobat Pro 2024 专业增强版特色 ● 创建和编辑 PDF 文件&#xff1a;可以将各种类型的文档转换为 PDF 格式&#xff0c;并进行编辑和修改。 ● 合并和拆分 PDF&#…...

二十、FTP云盘

1、服务端 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h>…...

【4】k8s集群管理系列--harbor镜像仓库本地化搭建

一、harbor基本概念 ‌Harbor是一个由VMware开源的企业级Docker镜像仓库解决方案‌&#xff0c;旨在解决企业在容器化应用部署中的痛点&#xff0c;提供镜像存储、管理、安全和分发的全生命周期管理‌。Harbor扩展了Docker Registry&#xff0c;增加了企业级功能&#xff0c;如…...

Oracle 12.1.0.2补丁安装全流程

第一步&#xff0c;先进行备份 tar -cvf u01.tar /u01 第二步&#xff0c;更新OPatch工具包 根据补丁包中readme信息汇总提示的信息&#xff0c;下载对应版本的OPatch工具包&#xff0c;本次下载的版本为&#xff1a; p6880880_122010_Linux-x86-64.zip opatch版本为最新的…...

【AAOS】【源码分析】Car UX Restrictions

AAOS UX的核心理念:安全驾驶是驾驶员的首要责任。汽车制造商和应用程序开发人员的所有设计都必须反映这一优先事项。 AAOS平台允许设备制造商(OEM)对不同驾驶状态下的限制进行定制。 驾驶员分心指南 只有符合Driver Distraction Guidelines的应用才可以在驾驶过程中运行。…...

解读《人工智能指数报告 2025》:洞察 AI 发展新态势

美国斯坦福大学 “以人为本人工智能研究院”&#xff08;HAI&#xff09;近日发布的第八版《人工智能指数报告》&#xff08;AI Index Report 2025&#xff09;备受全球瞩目。自 2017 年首次发布以来&#xff0c;该报告一直为政策制定者、研究人员、企业高管和公众提供准确、严…...

【SpringBoot+Vue自学笔记】003 SpringBoot Controll

跟着这位老师学习的&#xff1a;https://www.bilibili.com/video/BV1nV4y1s7ZN?vd_sourceaf46ae3e8740f44ad87ced5536fc1a45 这段话的意思其实是&#xff1a;Spring Boot 简化了传统 Web 项目的搭建流程&#xff0c;让你少折腾配置&#xff0c;直接开搞业务逻辑。 &#x1f52…...

探索Web3平台的数据安全和保护机制

在数字化时代&#xff0c;Web3 平台以其去中心化、透明性和用户主权等特点&#xff0c;正逐渐成为互联网技术的新宠。然而&#xff0c;随着数据价值的日益凸显&#xff0c;Web3 平台的数据安全和保护机制变得尤为重要。本文将深入探讨 Web3 平台的数据安全和保护机制&#xff0…...

基于ssh密钥访问远程Linux

1、在本地机器上生成密钥对&#xff08;默认保存在 ~/.ssh/&#xff09; ssh-keygen -t ed25519 或使用 RSA(兼容性更好)&#xff1a; ssh-keygen -t rsa -b 4096 2、 将公钥上传到远程主机 方法一&#xff1a;使用 ssh-copy-id ssh-copy-id -i ~/.ssh/id_ed25519.pub us…...

《基于神经网络实现手写数字分类》

《基于神经网络实现手写数字分类》 一、主要内容&#xff1a; 1、通过B站陈云霁老师的网课&#xff0c;配合书本资料&#xff0c;了解神经网络的基本组成和数学原理。 2、申请云平台搭建实验环境 3、基于5个不同的实验模块逐步理解实验操作步骤&#xff0c;并实现不同模块代码…...

1 cline 提示词工程指南-架构篇

cline 提示词工程指南-架构篇 本篇是 cline 提示词工程指南的学习和扩展&#xff0c;可以参阅&#xff1a; https://docs.cline.bot/improving-your-prompting-skills/prompting 前言 cline 是 vscode 的插件&#xff0c;用来在 vscode 里实现 ai 编程。 它使得你可以接入…...

代理模式简述

目录 一、主要角色 二、类型划分 三、静态代理 示例 缺点 四、动态代理 JDK动态代理 示例 缺点 CGLib动态代理 导入依赖 示例 五、Spring AOP 代理模式是一种结构型设计模式&#xff0c;通过代理对象控制对目标对象的访问&#xff0c;可在不改变目标对象情况下增强…...

Operator 开发入门系列(一):Hello World

背景 我们公司最近计划将产品迁移到 Kubernetes 环境。 为了更好地管理和自动化我们的应用程序&#xff0c;我们决定使用 Kubernetes Operator。 本系列博客将记录我们学习和开发 Operator 的过程&#xff0c;希望能帮助更多的人入门 Operator 开发。 目标读者 对 Kubernete…...

【Docker】运行错误提示 unknown shorthand flag: ‘d‘ in -d ----详细解决方法

使用docker拉取Dify的时候遇到错误 错误提示 unknown shorthand flag: d in -dUsage: docker [OPTIONS] COMMAND [ARG...]错误原因解析 出现 unknown shorthand flag: d in -d 的根本原因是 Docker 命令格式与当前版本不兼容&#xff0c;具体分为以下两种情况&#xff1a; 新…...

【AI插件开发】Notepad++ AI插件开发实践:实现对话窗口功能

引言 之前的文章已经介绍实现了AI对话窗口&#xff0c;但只有个空壳&#xff0c;没有实现功能。本次将集中完成对话窗口的功能&#xff0c;主要内容为&#xff1a; 模型动态切换&#xff1a;支持运行时加载配置的AI模型列表交互式输入处理&#xff1a;实现多行文本输入与Ctrl…...

在激烈竞争下B端HMI设计怎样打造独特用户体验?

在当今数字化高度发展的时代&#xff0c;B 端市场竞争愈发激烈。对于 B 端 HMI&#xff08;人机界面&#xff09;设计而言&#xff0c;打造独特的用户体验已成为在竞争中脱颖而出的关键因素。B 端用户在复杂的工作场景中&#xff0c;对 HMI 设计有着独特的需求和期望&#xff0…...

【Netty篇】Handler Pipeline 详解

目录 一、 Handler & Pipeline——流水线上的“特种部队”与“生产线”1、 ChannelHandler —— 流水线上的“特种兵”&#x1f46e;‍♂️2、 ChannelPipeline —— 生产线上的“接力赛跑”&#x1f3c3;‍♀️&#x1f3c3;‍♂️ 二、 代码实例1、 服务端代码示例2、 客…...

计算机网络 - UDP协议

通过一些问题来讨论 UDP 协议 什么是 UDP&#xff1f;举几个应用了 UDP 协议的例子UDP 与 TCP 有啥区别&#xff1f;&#xff08;PS&#xff1a;介绍三四个就可以了&#xff0c;不用说太多&#xff09;具体 UDP 是不可靠的&#xff0c;那你觉得如何实现一个可靠的 UDP &#x…...