初识arkts-类-接口

server/2024/11/20 7:34:23/

初识arkts-类-接口

类声明引入一个新类型,并定义其字段、方法和构造函数。定义类后,可以使用关键字new创建实例可以使用对象字面量创建实例

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 p:Person=new Person('','')
实例字段
class Person2{firstName:string=''lastName:string=''// 不能有构造函数/函数
}
静态

static将字段声明为静态

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

//静态字段static firstName:string=''
//静态函数
static a(num1:number,num2:number){Person3.firstName='江户时代'//不支持this,无法直接访问非静态字段/函数return num1+num2
}
//静态字段使用类名进行访问
Person3.firstName='hj'
方法

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

继承

一个类可以继承另一个类(称为基类),并使用以下语法实现多个接口继承类继承基类的字段和方法,但不继承构造函数。继承类可以新增定义字段和方法,也可以覆盖其基类定义的方法。基类也称为“父类”或“超类”。继承类也称为“派生类”或“子类”。包含implements子句的类必须实现列出的接口中定义的所有方法,但使用默认实现定义的方法除外

父类访问关键字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}`}
}
//子类
lass Dog extends pet{// 必须调用父类有参的构造函数constructor(name:string,sex:string) {super(name,sex)}name: string=''type:string=''//重写:子类重写父类函数//1.方法名相同 2.参数类型相同 3.返回值类型相同或是其子类show(){return`昵称:${this.name},姓名:${this.sex}`}
方法重写与重载

子类可以重写其父类中定义的方法的实现。重写的方法必须具有与原始方法相同的参数类型和相同或派生的返回类型。通过重载签名,指定方法的不同调用。具体方法为,为同一个方法写入多个同名但签名不同的方法头,方法实现紧随其后,如果两个重载签名的名称和参数列表均相同,则为错误

可见性修饰符类的方法和属性都可以使用可见性修饰符。

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

Private(私有)private修饰的成员不能在声明该成员的类之外访问

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

class Aa{//共有的public a1:string=''//受保护的:本类和子类中使用protected  a2:string=''//私有的private a3:string=''
}
Record类型的对象字面量

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

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

class Stu{name:string=''age:number=0
}
let map2:Record<string,Stu>={'张三':{name:'张三',age:18},'张4':{name:'张4',age:18},'张5':{name:'张5',age:18},'张6':{name:'张6',age:18},'张7':{name:'张7',age:18},'张8':{name:'张8',age:18}
}
let s:Stu=map2['']

接口

接口声明引入新类型。接口是定义代码协定的常见方式。任何一个类的实例只要实现了特定接口,就可以通过该接口实现多态。接口通常包含属性和方法的声明

interface Stus{//接口中的方法,没有方法体(方法的实现)eat():voidstudy():number
}
接口属性

接口属性可以是字段、getter、setter或getter和setter组合的形式。属性字段只是getter/setter对的便捷写法

接口继承

接口可以继承其他接口,继承接口包含被继承接口的所有属性和方法,还可以添加自己的属性和方法。继承关键字extends

interface Stu2{name:stringsex:stringeat():voidstudy():number
}
class Stu3 implements Stu2{//接口的属性会在实现类中默认隐式生成getter/settername: 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 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.')}

多态的实现方法,同一个方法在不同条件得到不同的结果

继承中的多态

class Pet{name:string=''play():void{console.log('')}
}
class Dog extends Pet{play():void{console.log('狗吃')}
}
class Cat extends Pet{play():void{console.log('猫网')}
}

http://www.ppmy.cn/server/143414.html

相关文章

uni-app快速入门(三)--UniApp生命周期

uni-app官方网站&#xff1a;uni-app官网 uni-app生命周期分为应用生命周期、页面生命周期、组件生命周期。应用生命周期函数包括onLaunch、onShow、onHide、onError等&#xff0c;应用生命周期仅可在App.vue文件中监听。 页面生命周期写在pages文件夹下的文件中。包括onLoad、…

tomcat顶层元素之<server>

简介 Server 元素代表整个 Catalina servlet 容器。因此&#xff0c;它必须是conf/server.xml 配置文件中的单个最外层元素。它的属性代表了servlet容器整体的特征。 属性 通用属性 AttributeDescriptionclassName 实现 org.apache.catalina.Server接口的Java类. 未指定, 则…

鸿蒙NEXT自定义组件:太极Loading

【引言】&#xff08;完整代码在最后面&#xff09; 本文将介绍如何在鸿蒙NEXT中创建一个自定义的“太极Loading”组件&#xff0c;为你的应用增添独特的视觉效果。 【环境准备】 电脑系统&#xff1a;windows 10 开发工具&#xff1a;DevEco Studio NEXT Beta1 Build Vers…

【算法】日期问题(C/C++)

目录 日期问题概述 一、闰年判断 问题描述&#xff1a; 解决方法&#xff1a; 代码实现&#xff1a; 二、回文日期 问题描述&#xff1a; 链接&#xff1a;2867. 回文日期 - AcWing题库 解决方法&#xff1a; 代码实现&#xff1a; 三、日期差值 问题描述&#xff1…

ISUP协议视频平台EasyCVR私有化部署视频平台如何实现RTMP推流将大疆无人机的视频画面回传?

在现代视频监控和流媒体技术领域&#xff0c;EasyCVR视频融合云平台以其卓越的性能和灵活性&#xff0c;成为了跨区域、网络化视频监控综合管理的理想选择。作为TSINGSEE青犀视频“云边端”架构体系中的核心组件&#xff0c;私有化部署视频平台EasyCVR不仅能够实现视频数据的集…

PWN:手动编写 x64 基于syscall 的 shell code(TODO)

syscall 在AMD64架构&#xff08;也称为x86-64或x64&#xff09;下&#xff0c;使用 syscall 指令来进行系统调用的约定如下&#xff1a; 系统调用号&#xff1a;存储在 RAX 寄存器中。参数传递&#xff1a; 第一个参数&#xff1a;RDI第二个参数&#xff1a;RSI第三个参数&a…

Vue3 虚拟列表组件库 virtual-list-vue3 的使用

Vue3 虚拟列表组件库 virtual-list-vue3 的基本使用 分享个人写的一个基于 Vue3 的虚拟列表组件库&#xff0c;欢迎各位来进行使用与给予一些更好的建议&#x1f60a; 概述&#xff1a;该组件组件库用于提供虚拟化列表能力的组件&#xff0c;用于解决展示大量数据渲染时首屏渲…

synchronized和volatile区别

synchronized和volatile都是Java中用于实现多线程同步的机制&#xff0c;但它们之间存在显著的差异。以下是对两者的详细比较&#xff1a; 一、作用机制 synchronized 锁机制&#xff1a;synchronized利用锁来保证同步。当某个线程进入由synchronized修饰的方法或代码块时&…