初始ArKTs 2

一.类

1.1 声明

类声明引入一个新类型,并定义其字段、方法和构造函数。

定义类后,可以使用关键字new创建实例 可以使用对象字面量创建实例

在以下示例中,定义了Person类,该类具有字段firstname和lastname、构造函数和方法fullName

//创建对象
export  class  Person{// 属性  必须要有初始值firstName:string=''lastName:string=''//构造函数:给属性初始值,初始化属性(可加可不加)// constructor() {//   console.log('无参函数')// }constructor(  firstName:string,lastName:string) {this.firstName = firstNamethis.lastName = lastName}fullName(){return this.lastName+this.firstName}
}
class Person2{firstName:string=''lastName:string=''//不能有构造函数和函数,只能有普通属性,赋值用:不用=// constructor(  firstName:string,lastName:string) {//   this.firstName = firstName//   this.lastName = lastName// }//不能有函数// fullName(){//   return this.lastName+this.firstName// }
}
//字面量创建对象
let pp:Person2={ firstName: '六', lastName: '王'}

1.2字段

字段是直接在类中声明的某种类型的变量。

类可以具有实例字段或者静态字段。

1.2.1 实例字段

实例字段存在于类的每个例字段实例上。每个实例都有自己的实例字段集合。

要访问实例字段,需要使用类的实例。

let p:Person=new Person('z','s')
//实例字段,通过new对象之后进行访问的字段
p.firstName='几十块';
1.2.2 静态字段

使用关键字static将字段声明为静态。静态字段属于类本身,类的所有实例共享一个静态字段。

要访问静态字段,需要使用类名

xport  class  Person3{//静态字段static firstName:string=''lastName:string=''

1.3 字段初始化

为了减少运行时的错误和获得更好的执行性能,

ArkTS要求所有字段在声明时或者构造函数中显式初始化。这和标准TS中的strictPropertyInitialization模式一样。

 

1.4 方法

方法属于类。类可以定义实例方法或者静态方法。静态方法属于类本身,只能访问静态字段。而实例方法既可以访问静态字段,也可以访问实例字段,包括类的私有字段

 1.4.1 静态方法

使用关键字static将方法声明为静态。静态方法属于类本身,只能访问静态字段

静态方法定义了类作为一个整体的公共行为。

必须通过类名调用静态方法

  //静态函数static  a(){Person3.firstName='张三'//不支持this,无法直接访问非静态字段和函数// this,lastName='aa'}
}

1.5 继承

一个类可以继承另一个类(称为基类),并使用以下语法实现多个接口

继承类继承基类的字段和方法,但不继承构造函数。继承类可以新增定义字段和方法,也可以覆盖其基类定义的方法。

基类也称为“父类”或“超类”。继承类也称为“派生类”或“子类”。

1.5.1 父类访问

关键字super可用于访问父类的实例字段实例方法构造函数。在实现子类功能时,可以通过该关键字从父类中获取所需接口

//宠物  父类,基类,超类
class  Pet{name:string=''sex:string=''static  age:number=0constructor(name:string,sex:string) {this.name=namethis.sex=sex}show(){return`昵称:${this.name},性别:${this.sex}`}
}
//子类 只支持单继承
class DOg extends Pet{//必须调用父类的有参的构造函数,不能继承constructor(name:string,sex:string) {//super 调用父类的构造函数super(name,sex)}

1.6 方法重写与重载

子类可以重写其父类中定义的方法的实现。重写的方法必须具有与原始方法相同的参数类型和相同或派生的返回类型。

通过重载签名,指定方法的不同调用。具体方法为,为同一个方法写入多个同名但签名不同的方法头,方法实现紧随其后,如果两个重载签名的名称和参数列表均相同,则为错误

  type:string=''//重写:子类重写父类的函数//要求:1.方法名相同2.参数类型相同3.返回值类型相同或是其子类show(){return super.show()+'品种'+this.type}//默认调用子类a(){this.show()//子类super.show()//父类}//方法的重载:1.同一类中,方法名相同,参数列表不同,返回值类型相同//arkts不支持重载// shows(a:number){//// }// shows(a:number){//// }
class  Over{//重载// aa(x:number):void// aa(x:string):voidaa(x:number|string):void{}
}

1.7构造函数

类声明可以包含用于初始化对象状态的构造函数

如果未定义构造函数,则会自动创建具有空参数列表的默认构造函数

在这种情况下,默认构造函数使用字段类型的默认值来初始化实例中的字段

class  Pri{private _a1: stringpublic set a1(value: string) {this._a1 = value}public get a1(): string {return this._a1}private _a2: stringpublic set a2(value: string) {this._a2 = value}public geta2(): string {return this._a2}constructor(a1: string, a2: string) {this._a1 = a1this._a2 = a2}}let p1=new Pri('1','2');
p1.a1='a'

 1. 8可见性修饰符

public(公有)

public修饰的类成员(字段、方法、构造函数)在程序的任何可访问该类的地方都是可见的。

private(私有)

private修饰的成员不能在声明该成员的类之外访问

protected(受保护)

protected修饰符的作用与private修饰符非常相似,不同点是protected修饰的成员允许在派生类中访问

class Aa{//共有的public a1:string=''//受保护的:本类和子类中使用protected  a2:string=''//私有的private  a3:string=''
}
class  Bb extends  Aa{show(){this.a2='asd'}}
let aa=new Aa();
let bb=new Bb()

getter和setter

setter和getter可用于提供对对象属性的受控访问

1.9 对象字面量

对象字面量是一个表达式,可用于创建类实例并提供一些初始值.他在某些情况下更方便,可以用来代替new表达式

对象字面量的表达方式是:封闭在花括号对({})中的'属性名:值'的列表

class C{
n:number=0
s;string=''
}let c:C={n:42,S:'foo'}

对象字面量只能在推导出该字面量类型的上下文中使用

也可以在数组元素类型或字段类型中使用

1.10Record类型的对象字面量

泛型Record<K, V>用于将类型(键类型)的属性映射到另一个类型(值类型)。常用对象字面量来初始化该类型的值

类型K可以是字符串类型或数值类型,而V可以是任何类型

二.接口

2.1接口

接口声明引入新类型。接口是定义代码协定的常见方式。

任何一个类的实例只要实现了特定接口,就可以通过该接口实现多态。

接口通常包含属性和方法的声明

//接口
interface Stus{//接口中的方法,没有方法体(方法的实现)eat():voidstudy():number
}
//(实现类)实现接口,必须重写接口中的方法
class  Stu1 implements  Stus{eat(): void {console.log('学生在吃')}study(): number {console.log('学生在学习')return 100}}

2.2接口属性

接口属性可以是字段、getter、setter或getter和setter组合的形式。

属性字段只是getter/setter对的便捷写法

              

实现接口的类也可以使用以下两种方式

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在云服务器搭建 Docker

操作场景 本文档介绍如何在腾讯云云服务器上搭建和使用 Docker。本文适用于熟悉 Linux 操作系统&#xff0c;刚开始使用腾讯云云服务器的开发者。如需了解更多关于 Docker 相关信息&#xff0c;请参见 Docker 官方。 说明&#xff1a; Windows Subsystem for Linux&#xff…

【IDER、PyCharm】免费AI编程工具完整教程:ChatGPT Free - Support Key call AI GPT-o1 Claude3.5

文章目录 CodeMoss 简介CodeMoss 的模型集成如何安装和配置 CodeMossIDER 插件安装步骤 CodeMoss 的实战使用AI 问答功能代码优化与解释优化这段代码解释这段代码 文件上传与对话联网查询与 GPT 助手联网查询GPT 助手 提升开发效率的最佳实践结语更多文献 CodeMoss 简介 CodeM…

编译报错:protoc did not exit cleanly. Review output for more information.

目录标题 解决“protoc did not exit cleanly”的报错问题检查.proto文件的语法 解决“protoc did not exit cleanly”的报错问题 今天做的项目需要用到grpc&#xff0c;然后需要编写proto然后编译后实现grpc的具体方法&#xff01; 结果编译的时候报了protoc did not exit cl…

语义分割(semantic segmentation)

语义分割(semantic segmentation) 文章目录 语义分割(semantic segmentation)图像分割和实例分割代码实现 语义分割指将图片中的每个像素分类到对应的类别&#xff0c;语义区域的标注和预测是 像素级的&#xff0c;语义分割标注的像素级的边界框显然更加精细。应用&#xff1a…

【竞技宝】LOL-传奇杯:姿态飞机TP绕后一锤定音

北京时间2024年11月19日,英雄联盟第二届传奇杯正在如火如荼的进行之中。昨天迎来小组赛第四个比赛日,本日一共进行了七场小组赛的对决,那么在昨日上半场的四场比赛中,登场的各支队伍都取得了什么样的表现呢?接下来小宝为大家带来小组赛day4上半场的比赛战报。 OP(宁王队) 0-1 …

网络安全之信息收集-实战-1

请注意&#xff0c;本文仅供合法和授权的渗透测试使用&#xff0c;任何未经授权的活动都是违法的。 实战&#xff1a;补天公益src“吉林通用航空职业技术学院” 奇安信&#xff5c;用户登录https://www.butian.net/Loo/submit?cid64918 域名或ip&#xff1a;https://www.jlth…

【后端】版本控制

版本控制 1. 什么是版本控制&#xff1f; 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理…

【YOLOv11改进[注意力]】引入DA、FCA、SA、SC、SE + 含全部代码和详细修改方式

本文将进行在YOLOv11中引入DA、FCA、SA、SC、SE魔改v11,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 一 DA、FCA、SA、SC、SE ① DA 论文:Dual Attention Network for Scene Segm

【数据结构】链表解析与实战运用(1.8w字超详细解析)

目录 引言 链表概念及结构 链表的优缺点 链表的分类 1.单向或者双向 2.带头或者不带头 3.带循环或者非循环 单链表接口函数的实现 接口函数一览 创建空节点&打印链表 尾部插入 头部插入 尾部删除 头部删除 查找 在pos位置之后插入节点 在pos位置之前插入节…

(微信小程序)基于Spring Boot的校园失物招领平台的设计与实现(vue3+uniapp+mysql)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

【Linux课程学习】:Linux的调试器-gdb的使用(常见指令,cgdb)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 安装cgdb&#xff1a; 基本环境 1检查gdb是否…

【WRF-Urban】URBPARM.TBL参数解释及内容

【WRF-Urban】URBPARM.TBL参数解释及内容 URBPARM.TBL参数解释URBPARM.TBL参考 参考WRF-Urban教程-Urban Canopy Model URBPARM.TBL参数解释 各个城市相应的城市参数差异很大&#xff08;例如&#xff0c;有些城市的道路可能很宽但建筑物很矮&#xff0c;而其他城市的道路可…

DBeaver 连接 OceanBase Oracle 租户

DBeaver 是一款通用的数据库工具软件&#xff0c;支持任何具有JDBC驱动程序的数据库。DBeaver 需要 Java 运行环境的支持。截稿时 DBeaver 24.0.0 版本默认提供的 OceanBase 驱动是连接 MySQL 的&#xff0c;想连接 Oracle 租户需要新建一个驱动器使用。 下载数据库驱动包 1、…

使用 Prompt API 与您的对象聊天

tl;dr&#xff1a;GET、PUT、PROMPT。现在&#xff0c;可以使用新的 PromptObject API 仅使用自然语言对存储在 MinIO 上的对象进行总结、交谈和提问。在本文中&#xff0c;我们将探讨这个新 API 的一些用例以及代码示例。 赋予动机&#xff1a; 对象存储和 S3 API 的无处不在…

23种设计模式-访问者(Visitor)设计模式

文章目录 一.什么是访问者模式&#xff1f;二.访问者模式的结构三.访问者模式的应用场景四.访问者模式的优缺点五.访问者模式的C实现六.访问者模式的JAVA实现七.代码解释八.总结 类图&#xff1a; 访问者设计模式类图 一.什么是访问者模式&#xff1f; 访问者模式&#xff08;…

【开源免费】基于Vue和SpringBoot的在线考试系统(附论文)

本文项目编号 T 624 &#xff0c;文末自助获取源码 \color{red}{T624&#xff0c;文末自助获取源码} T624&#xff0c;文末自助获取源码 网络的广泛应用给生活带来了十分的便利。所以把在线考试管理与现在网络相结合&#xff0c;利用java技术建设在线考试系统&#xff0c;实现…

【H2O2|全栈】MySQL的云端部署

目录 前言 开篇语 准备工作 MySQL移除 为什么需要移除&#xff1f; 移除操作 Yum仓库 yum简介 rpm安装 yum库安装 MySQL安装 使用yum安装 开机自启动 检查运行状态 MySQL配置 初始密码 ​编辑登录 修改root密码 退出MySQL 字符集配置 重启数据库 结束语 …

DAY30|贪心算法Part04|LeetCode:452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间

目录 LeetCode:452. 用最少数量的箭引爆气球 基本思路 C代码 LeetCode:435. 无重叠区间 基本思路 C代码 LeetCode:763.划分字母区间 基本思路 C代码 LeetCode:452. 用最少数量的箭引爆气球 力扣代码链接 文字讲解&#xff1a;LeetCode:452. 用最少数量的箭引爆气球 视…

Enterprise Architect 16 下载、安装与无限30天操作

文章目录 Enterprise Architect 16 简介&#xff08;一&#xff09;支持多种建模语言和标准&#xff08;二&#xff09;强大的版本控制、协作和文档管理功能&#xff08;三&#xff09;增强的技术和用户体验&#xff08;四&#xff09;高级功能和扩展性 一&#xff0c;下载软件…

31.3 XOR压缩和相关的prometheus源码解读

本节重点介绍 : xor 压缩value原理xor压缩过程讲解xor压缩prometheus源码解读xor 压缩效果 xor 压缩value原理 原理:时序数据库相邻点变化不大&#xff0c;采用异或压缩float64的前缀和后缀0个数 xor压缩过程讲解 第一个值使用原始点存储计算和前面的值的xor 如果XOR值为0&…