初识Arkts
创建对象:
类:
类声明引入一个新类型,并定义其字段、方法和构造函数。 定义类后,可以使用关键字new创建实例 可以使用对象字面量创建实例 在以下示例中,定义了Person类,该类具有字段name和surname、构造函数和方法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}
}
let pp:Person=new Person('z','s')
//实例字段,通过new对象之后进行访问的字段
pp.firstName='啧啧啧';
字段
字段是直接在类中声明的某种类型的变量。 类可以具有实例字段或者静态字段。 实例字段 实例字段存在于类的每个实例上。每个实例都有自己的实例字段集合。 要访问实例字段,需要使用类的实例。
class Person2{firstName:string=''lastName:string=''//不能有构造函数/函数
}
//字面量创建对象
let p:Person2={ firstName: '三', lastName: '张'}export class Person3{//静态字段static firstName:string=''lastName:string=''
静态字段
使用关键字static将字段声明为静态。静态字段属于类本身,类的所有实例共享一个静态字段。 要访问静态字段,需要使用类名.
//静态函数static a(num1:number,num2:number){Person3.firstName='张三'//不支持this无法直接访问非静态字段/函数//this.lastName='aa'// a2();return num1+num2}
}
//静态字段使用类名进行访问
Person3.firstName='ss'
方法属于类。类可以定义实例方法或者静态方法。静态方法属于类本身,只能访问静态字段。而实例方法既可以访问静态字段,也可以访问实例字段,包括类的私有字段。
继承
一个类可以继承另一个类(称为基类),并使用以下语法实现多个接口 继承类继承基类的字段和方法,但不继承构造函数。继承类可以新增定义字段和方法,也可以覆盖其基类定义的方法。 基类也称为“父类”或“超类”。继承类也称为“派生类”或“子类”。 包含implements子句的类必须 实现列出的接口中定义的所有方法, 但使用默认实现定义的方法除外.
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)}type:string=''//重写:子类重写父类的函数//1.方法名相同2.参数类型相同3.返回值类型相同,或是其子类show(){// return`昵称 :${this.name},性别:${this.sex},品种:${this.type}`return super.show()+'品种:'+this.type}a(){this.show()//子类super.show()//父类}
父类访问
关键字super可用于访问父类的实例字段、实例方法和构造函数。在实现子类功能时,可以通过该关键字从父类中获取所需接口
//子类 只支持单继承
class Dog extends Pet{//必须调用父类的有参的构造函数constructor(name:string,sex:string) {//super调用父类的构造函数super(name,sex)}type:string=''//重写:子类重写父类的函数//1.方法名相同2.参数类型相同3.返回值类型相同,或是其子类show(){// return`昵称 :${this.name},性别:${this.sex},品种:${this.type}`return super.show()+'品种:'+this.type}a(){this.show()//子类super.show()//父类}
方法重写与重载
子类可以重写其父类中定义的方法的实现。重写的方法必须具有与原始方法相同的参数类型和相同或派生的返回类型。 通过重载签名,指定方法的不同调用。具体方法为,为同一个方法写入多个同名但签名不同的方法头,方法实现紧随其后,如果两个重载签名的名称和参数列表均相同,则为错误.
//重载:1.同一个类,方法名相同,参数列表不同,返回值类型相同// shows(a:number){// }// shows(){//// }
}
let pe=new Pet('zs','公')
//子类函数和父类重名,会调用子类函数
pe.show()class Over{//重载aa(x:number):voidaa(x:string):voidaa(x:number|string):void{}
}
class Oo extends Over{aa(x:number):voidaa(x:string):voidaa(x:number|string):void{}
}
构造函数重载签名 我们可以通过编写重载签名,指定构造函数的不同调用方式。具体方法为,为同一个构造函数写入多个同名但签名不同的构造函数头,构造函数实现紧随其后。
如果两个重载签名的名称和参数列表均相同,则为错误。
//重载aa(x:number):voidaa(x:string):voidaa(x:number|string):void{}
}
class Oo extends Over{aa(x:number):voidaa(x:string):voidaa(x:number|string):void{}
}
可见性修饰符
类的方法和属性都可以使用可见性修饰符。 Public(公有) public修饰的类成员(字段、方法、构造函数)在程序的任何可访问该类的地方都是可见的。 Private(私有) private修饰的成员不能在声明该成员的类之外访问 Protected(受保护) protected修饰符的作用与private修饰符非常相似,不同点是protected修饰的成员允许在派生类中访问 getter和setter setter和getter可用于提供对对象属性的受控访问
class Aa{//共有的public a1:string=''//受保护的:本类和子类中使用protected a2:string=''//私有的private a3:string=''
}
class Bb extends Aa{show(){this.a2='asd'// this.a3='ss'}
}
let aa=new Aa();
let bb=new Bb()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 get a2(): string {return this._a2}constructor(a1: string, a2: string) {this._a1 = a1this._a2 = a2}}
let p1=new pri('1','2');
p1.a1='a'
Record类型的对象字面量 泛型Record<K, V>用于将类型(键类型)的属性映射到另一个类型(值类型)。常用对象字面量来初始化该类型的值类型K可以是字符串类型或数值类型,而V可以是任何类型
//map键值对 <key,value>泛型
let map:Record<string,string>={'name':'张三','sex':'男','color':'黄'
}
let names=map['name'];
class Stu{name:string=''age:number=0
}
let map2:Record<string,Stu>={'张三':{name:'张三',age:18},'张2':{name:'张2',age:18},'张4':{name:'张4',age:18},'张5':{name:'张5',age:18},'张6':{name:'张6',age:18},
}
let S:Stu=map2['张三'];
接口
接口声明引入新类型。接口是定义代码协定的常见方式。 任何一个类的实例只要实现了特定接口,就可以通过该接口实现多态。 接口通常包含属性和方法的声明
interface Stus{//接口中的方法,没有方法体(方法的实现)eat():voidstudy():number
}
//(实现类)实现接口,必须重写接口中的方法
class Stu1 implements Stus{eat(): void {console.log('学生在吃')}study(): number {console.log('学生在学习')return 100}}
接口属性 接口属性可以是字段、getter、setter或getter和setter组合的形式。 属性字段只是getter/setter对的便捷写法实现接口的类也可以使用以下两种方式
interface Stu2{//接口的属性会在实现类中默认隐式生成getter/setter方法name:stringsex:stringeat():voidstudy():number
}
class Stu3 implements Stu2{name: string=''sex: string=''eat(): void {throw new Error('Method not implemented.')}study(): number {throw new Error('Method not implemented.')}}
let stu3=new Stu3();
stu3.name='123'interface Inte1{a():void
}
interface Inte2 extends Inte1{b():void
}
class Imp1 implements Inte2{b(): void {throw new Error('Method not implemented.')}a(): void {throw new Error('Method not implemented.')}}
interface A1{a():void
}
interface B1{b():void
}
//实现多个接口
class C1 implements A1,B1{b(): void {throw new Error('Method not implemented.')}a(): void {throw new Error('Method not implemented.')}}
接口继承 接口可以继承其他接口,如下面的示例所示继承接口包含被继承接口的所有属性和方法,还可以添加自己的属性和方法。 继承关键字extends
interface Inte1{a():void
}
interface Inte2 extends Inte1{b():void
}
class Imp1 implements Inte2{b(): void {throw new Error('Method not implemented.')}a(): void {throw new Error('Method not implemented.')}}
泛型
泛型类型和函数 泛型类型和函数允许创建的代码在各种类型上运行,而不仅支持单一类型。 泛型类和接口 类和接口可以定义为泛型,将参数添加到类型定义中,如以下示例中的类型参数Element:
class Pet{name:string=''play():void{console.log('玩耍')}
}
class Dog extends Pet{play():void{console.log('狗踢皮球')}
}
class Cat extends Pet{play():void{console.log('猫玩狗')}
}
//1.以父类作为形参
//和宠物玩耍
// function play(cat:Cat){
// Cat.play()
// }
// play(new Cat())
function play(pet:Pet){pet.play()
}
play(new Cat())
play(new Dog())
//2,以父类作为返回值
function ly():Pet{let num=Math.random()*10if(num>5){return new Dog()}else {return new Cat()}
}
通配符
泛型中通配符 我们在定义泛型类,泛型方法,泛型接口的时候经常会碰见很多不同的通配符,比如 T,E,K,V 等等,这些通配符又都是什么意思呢? 常用的 T,E,K,V,? 本质上这些个都是通配符,没啥区别,只不过是编码时的一种约定俗成的东西。比如上述代码中的 T ,我们可以换成 A-Z 之间的任何一个 字母都可以,并不会影响程序的正常运行,但是如果换成其他的字母代替 T ,在可读性上可能会弱一些。通常情况下,T,E,K,V,?是这样约定的: ?表示不确定的 类型 T (type) 表示具体的一个类 K V (key value) 分别代表键值中的Key Value E (element) 代表Element ?无界通配符
class Fx<E>{a(e:E):void{console.log(`${e}`)}
}
let fx=new Fx<number[]>();
fx.a([1,2])
//返回数组的最后一个元素
function lastGet(x:number[]):number{return x[x.length]
}
let aa=lastGet([1,2,3,4])
//返回任意类型数组的最后一个元素
function getlast<T>(x:T[]):T{return x[x.length-1]
}
let a2=getlast<String>(['1','2','as'])
相关文章:
初识Arkts
创建对象: 类: 类声明引入一个新类型,并定义其字段、方法和构造函数。 定义类后,可以使用关键字new创建实例 可以使用对象字面量创建实例 在以下示例中,定义了Person类,该类具有字段name和surname、构造函…...
基本的SELECT语句
1.SQL概述 SQL(Structured Query Language)是一种用于管理和操作关系数据库的编程语言。它是一种标准化的语言,用于执行各种数据库操作,包括创建、查询、插入、更新和删除数据等。 SQL语言具有简单、易学、高效的特点,…...
51c自动驾驶~合集30
我自己的原文哦~ https://blog.51cto.com/whaosoft/12086789 #跨越微小陷阱,行动更加稳健 目前四足机器人的全球市场上,市场份额最大的是哪个国家的企业?A.美国 B.中国 C.其他 波士顿动力四足机器人 云深处 绝影X30 四足机器人 …...
Python Tutor网站调试利器
概述 本文主要是推荐一个网站:Python Tutor. 网站首页写道: Online Compiler, Visual Debugger, and AI Tutor for Python, Java, C, C++, and JavaScript Python Tutor helps you do programming homework assignments in Python, Java, C, C++, and JavaScript. It contai…...
h5小游戏实现获取本机图片
h5小游戏实现获取本机图片 本文使用cocos引擎 1.1 需求 用户通过文件选择框选择图片。将图片内容转换为Cocos Creator的纹理 (cc.Texture2D),将纹理设置到 cc.SpriteFrame 并显示到节点中。 1.2 实现步骤 创建文件输入框用于获取文件 let input document.createElement(&quo…...
前端 javascript a++和++a的区别
前端 javascript a和a的区别 a 是先执行表达式后再自增,执行表达式时使用的是a的原值。a是先自增再执行表达示,执行表达式时使用的是自增后的a。 var a0 console.log(a); // 输出0 console.log(a); // 输出1var a0 console.log(a); // 输出1 console.l…...
OceanBase V4.x应用实践:如何排查表被锁问题
DBA在日常工作中常常会面临以下两种常见情况: 业务人员会提出问题:“表被锁了,导致业务受阻,请帮忙解决。” 业务人员还会反馈:“某个程序通常几秒内就能执行完毕,但现在却运行了好几分钟,不清楚…...
ctfshow-web入门-SSRF(web351-web360)
目录 1、web351 2、web352 3、web353 4、web354 5、web355 6、web356 7、web357 8、web358 9、web359 10、web360 1、web351 看到 curl_exec 函数,很典型的 SSRF 尝试使用 file 协议读文件: urlfile:///etc/passwd 成功读取到 /etc/passwd 同…...
【日常记录-Git】如何为post-checkout脚本传递参数
1. 简介 在Git中,post-checkout 钩子是一个在git checkout 或git switch命令成功执行后自动调用的脚本。该脚本不接受任何来自Git命令的直接参数,因为Git设计该钩子是为了在特定的版本控制操作后执行一些预定义的任务,而不是作为一个通用的脚…...
《机器人控制器设计与编程》考试试卷**********大学2024~2025学年第(1)学期
消除误解,课程资料逐步公开。 复习资料: Arduino-ESP32机器人控制器设计练习题汇总_arduino编程语言 题-CSDN博客 试卷样卷: 开卷考试,时间: 2024年11月16日 001 002 003 004 005 ……………………装………………………...
后台管理系统(开箱即用)
很久没有更新博客了,给大家带上一波福利吧,大佬勿扰 现在市面上流行的后台管理模板很多,若依,芋道等,可是这些框架对我们来说可能会有点重,所以我自己从0到1写了一个后台管理模板,你们使用时候可扩展性也会更高 项目主要功能: 成员管理,部门管理&#…...
5G CPE与4G CPE的主要区别有哪些
什么是CPE? CPE是Customer Premise Equipment(客户前置设备)的缩写,也可称为Customer-side Equipment、End-user Equipment或On-premises Equipment。CPE通常指的是位于用户或客户处的网络设备或终端设备,用于连接用户…...
量化交易系统开发-实时行情自动化交易-4.1.3.A股平均趋向指数(ADX)实现
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来继续说说A股平均趋向指数实现。 …...
tcp的网络惊群问题
1. SO_REUSEPORT 可以解决epoll的惊群问题 但是,现在的 TCP Server,一般都是 多进程多路IO复用(epoll) 的并发模型,比如我们常用的 nginx 。如果使用 epoll 去监听 accept socket fd 的读事件,当有新连接建立时,所有进…...
云原生之运维监控实践-使用Prometheus与Grafana实现对Nginx和Nacos服务的监测
背景 如果你要为应用程序构建规范或用户故事,那么务必先把应用程序每个组件的监控指标考虑进来,千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章,当…...
软考教材重点内容 信息安全工程师 第 4 章 网络安全体系与网络安全模型
4,1 网络安全体系的主要特征: (1)整体性。网络安全体系从全局、长远的角度实现安全保障,网络安全单元按照一定的规则,相互依赖、相互约束、相互作用而形成人机物一体化的网络安全保护方式。 (2)协同性。网络安全体系依赖于多种安全机制,通过各…...
机器学习——期末复习 重点题归纳
第一题 问题描述 现有如下数据样本: 编号色泽敲声甜度好瓜1乌黑浊响高是2浅白沉闷低否3青绿清脆中是4浅白浊响低否 (1)根据上表,给出属于对应假设空间的3个不同假设。若某种算法的归纳偏好为“适应情形尽可能少”,…...
MYSQL——数据更新
一、插入数据 1.插入完整的数据记录 在MYSQL中,使用SQL语句INSERT插入一条完整的记录,语法如下: INSERT INTO 表名 [(字段名1[,...字段名n])] VALUES (值1[...,值n]); 表名——用于指定要插入的数据的表名 字段名——用于指定需要插入数据…...
Vite 基础理解及应用
文章目录 概要Vite基础知识点1. 快速启动和热更新热更新原理 2. 基于ES模块的构建3. 对不同前端框架的支持 vite.config.js配置实例1. 基本结构2. 服务器相关配置3. 输入输出路径配置4. 打包优化配置 项目构建一、项目初始化二、项目结构理解三、CSS处理四、静态资源处理五、构…...
[JAVA]用MyBatis框架实现一个简单的数据查询操作
基于在前面几章我们已经学习了对MyBatis进行环境配置,并利用SqlSessionFactory核心接口生成了sqlSession对象对数据库进行交互,执行增删改查操作。这里我们就先来学习如何对数据进行查询的操作,具体查询操作有以下几个步骤 创建实体类创建Ma…...
CSS 样式的优先级?
在CSS中,样式的优先级决定了当多个样式规则应用于同一个元素时,哪个样式会被最终使用。以下是一些决定CSS样式优先级的规则: 就近原则: 最后应用在元素上的样式具有最高优先级。这意味着如果两个选择器都应用了相同的样式…...
Linux驱动开发快速入门——字符设备驱动(直接操作寄存器设备树版)
Linux驱动开发快速入门——字符设备驱动 前言 笔者使用开发板型号:正点原子的IMX6ULL-alpha开发板。ubuntu版本为:20.04。写此文也是以备忘为目的。 字符设备驱动 本小结将以直接操作寄存器的方式控制一个LED灯,可以通过read系统调用可以…...
数据结构《栈和队列》
文章目录 一、什么是栈?1.1 栈的模拟实现1.2 关于栈的例题 二、什么是队列?2.2 队列的模拟实现2.2 关于队列的例题 总结 提示:关于栈和队列的实现其实很简单,基本上是对之前的顺序表和链表的一种应用,代码部分也不难。…...
C# 超链接控件LinkLabel无法触发Alt快捷键
在C#中,为控件添加快捷键的方式有两种,其中一种就是Windows中较为常见的Alt快捷键,比如运行对话框,记事本菜单等。只需要按下 Alt 框号中带下划线的字母即可触发该控件的点击操作。如图所示 在C#开发中,实现类似的操作…...
JVM类加载过程-Loading
一、Class对象的生命周期 .class文件是如何加载到内存中:.class文件是ClassLoader通过IO将文件读到内存,再通过双亲委派的模式进行Loading,再Linking、以及Initializing,代码调用等一系列操作后,进行GC,组成完整的生命周期; 二、双亲委派模式(Loading的过程): 1、类…...
2024年11月19日Github流行趋势
项目名称:build-your-own-x 项目维护者:danistefanovic, rohitpaulk, sarupbanskota 等项目介绍:通过从零开始重新创建你最喜欢的技术来掌握编程。项目star数:312,081项目fork数:29,004 项目名称:freqtrad…...
详细描述一下Elasticsearch索引文档的过程?
大家好,我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程?】面试题。希望对大家有帮助; 详细描述一下Elasticsearch索引文档的过程? Elasticsearch的索引文档过程是其核心功能之一,涉及将数据存储到…...
基于css的Grid布局和vue实现点击左移右移轮播过渡动画效果
直接上代码,以下代码基于vue2,需要Vue3或者react可以使用国内直连GPT/Claude来帮你转换下 代码如下: // ScrollCardsGrid.vue <template><div class"scroll-cards-container"><!-- 左箭头 --><div v-show"showLef…...
HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)习惯推荐方案概述
一、习惯推荐是HarmonyOS学习用户的行为习惯后做出的主动预测推荐。 1.开发者将用户在应用/元服务内的使用行为向HarmonyOS共享,使得HarmonyOS可以基于共享的数据学习用户的行为习惯。 2.在HarmonyOS学习到用户的行为习惯后,会给用户推荐相应功能&#x…...
【AtCoder】Beginner Contest 380-F.Exchange Game
题目链接 Problem Statement Takahashi and Aoki will play a game using cards with numbers written on them. Initially, Takahashi has N N N cards with numbers A 1 , … , A N A_1, \ldots, A_N A1,…,AN in his hand, Aoki has M M M cards with numbers B …...
做的比较唯美的网站/百度热搜榜历史
1、一般禁用选项在 settings > mouse and touchpad 中。(16.04通过实验)如果无法禁用或者希望恢复,向下看。 2、命令行键入: xinput ,插卡touchpad的ID号。 我的Dell笔记本显示如下: 1 ⎡ Virtual core pointer …...
政府门户网站的建设管理/百度推广的四种收费形式
最近物联网都比较的火,因此,特别为各位兄弟姐妹们,奉上一款Mobus协议的测试软件,可以用来做设备的压力测试,和通信测试。 起初软件开发缘由是我们最近在开发一款设备,需要将多个DS18B20并联起来,…...
初中生如何做网站/nba最新交易信息
介质访问控制 ALOHA协议 纯ALOHA协议 时隙ALOHA协议 关于ALOHA要知道的事 1.纯ALOHA比时隙ALOHA吞吐量更低,效率更低。 2.纯ALOHA想发就发,时隙ALOHA只有在时间片段开始时才能发。...
临沂做网站设计的公司/重庆森林百度网盘
转自:爱数据学习社数据是企业最具价值的资产之一,而数据质量则直接影响数据的产出和数据价值的高低。因此,数据质量的管理对于企业决策、战略水平和业绩提升至关重要。今天我们就来聊一聊企业如何评估和提升数据质量。一、数据质量是什么国际…...
合肥网站设计制作/个人做外贸怎样起步
这篇文章主要介绍了python plotly画柱状图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下代码import pandas as pdimport numpy as npimport plotly.plotly as pyimport plotly.graph_objs as gopath …...
个人网站的留言板怎么做/网站建设公司哪家好?该如何选择
一、概述 在Android6.0之前的系统中,APP只要在AndroidManifest.xml声明了权限,就获得了授权,用户只能选择授权或者不安装该应用。Android 6.0在原有的AndroidManifest.xml声明权限的基础上,又新增了运行时权限动态检测&…...