Typescript语法二

继承

继承是⾯向对象编程中的重要机制,允许⼀个类(⼦类或派⽣类)继承另⼀个类(⽗类或基类)的属性和⽅法。⼦类可以直接使⽤⽗类的特性,并根据需要添加新的特性或覆盖现有的特性。这种机制赋予⾯向对象程序良好的扩展性。
下⾯通过⼀个例⼦演⽰继承的特性:
class Student extends Person {classNumber: string;constructer(id:number, name: string, classNumber: string) {super(id,name);this.classNumber = classNumber;}    introduce(): string {return super.introduce() + `, and I am a student`;}}let student = new Student(1, 'xiaoming','三年二班');
console.log(student.introduce());

注意:

        类的继承需要使用关键字extends

        子类构造器中需使用super()调用父类构造器对继承自父类的属性进行初始化。

        在子类可以使用this关键字访问继承自父类的属性和方法

        在子类中可以使用super关键字访问父类定义的方法

访问修饰符

访问修饰符(Access Modifiers)⽤于控制类成员(属性、⽅法等)的可访问性。TypeScript提供了三种访问修饰符,分别是private、protected和public。

class Person {private id: number;protected name: string;public age: number;constructor(id: number, name: string, age: number) {this.id = id;this.name = name;this.age = age;}
}class Student extends Person {}

说明:

        private 修饰的属性或方法是私有的,只能在声明它的类中被访问

        protected修饰的属性或方法是受保护的,只能在声明它的类和其子类中被访问。

        public修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是public的

接口(interface)

接口(interface)是面向对象编程中的另一个重要概念。接口通常会作为一种契约或规范让类(class)去遵守,确保类实现某些特定的行为或功能。

语法说明
接⼝定义
接⼝使⽤ interface 关键字定义,通常情况下,接⼝中只会包含属性和⽅法的声明,⽽不包含具体
的实现细节,具体的细节由其实现类完成。

interface Person {id: number;name: string;age: number;introduce(): void;    }    

接口实现

接⼝的实现需要⽤到 implements 关键字,实现类中,需要包含接⼝属性的赋值逻辑,以及接⼝⽅
法的实现逻辑。
class Student implements Person {id: number;name: string;age: number;constructor(id: number,name: string, age: number) {this.id = id;this.name = name;this.age = age;}introduce(): void {console.log('Hello,I am a student');}}

多态
多态是⾯相对象编程中的⼀个重要概念,它可以使同⼀类型的对象具有不同的⾏为。下⾯我们通过⼀个具体的案例来体会多态这⼀概念.
⾸先,再创建⼀个 Person 接⼝的实现类 Teacher ,如下:

class Teacher implements Person {id: number;name: string;age: number;constructor(id: number,name: string, age: number) {this.id = id;this.name = name;this.age = age;}introduce(): void {console.log('Hello,I am a Teacher');}}

然后分别创建一个Student对象和⼀个 Teacher 对象,注意两个对象的类型均可以设置Person ,如下:

let p1: Person = new Student(1, 'zhangsan', 17);
let p2: Person = new Teacher(2, 'list', 35)
最后分别调⽤ p1 p2 introduce() ⽅法,你会发现,同样是 Person 类型的两个对象,调⽤同⼀个 introduce() ⽅法时,表现出了不同的⾏为,这就是多态。

p1.introduce();  //Hello, I am a student
p2.introduce();  //Hello, I am a teacher

接口的作用(重点!!!)

在传统的⾯向对象编程的场景中,接⼝主要⽤于设计和组织代码,使代码更加容易扩展和维护。下⾯举例说明。
假如现在需要实现⼀个订单⽀付系统,按照⾯向对象编程的习惯,⾸先需要定义⼀个订单类
(Order),如下

class Order {totalAmount: number;constructor(totalAmount: number) {this.totalAmount = totalAmount;} pay() {console.log(`AliPay: ${this.totalAmount}`);}}
很容易预想到,这个系统将来可能需要⽀持其他的⽀付⽅式,为了⽅便代码⽀持新的⽀付⽅式,我们可以对代码进⾏如下改造。‘
⾸先定义⼀个⽀付策略的接⼝,接⼝中声明⼀个 pay ⽅法,⽤来规范实现类必须实现⽀付逻辑。
interface PaymentStrategy {pay(amount: number): void;
}
然后在订单类中增加⼀个 PaymentStrategy 的属性,并且在订单类中的 pay ⽅法中调⽤
PaymentStrategy pay ⽅法,如下

class Order {totalAmount: number;paymentStrategy: PaymentStrategy;constructor(totalAmount: number,paymentStrategy: PaymentStrategy) {this.totalAmount = totalAmount;this.paymentStrategy = paymentStrategy;    }pay() {this.paymentStrategy.pay(this.totalAmount);}}

这样改造完之后,就可以很容易的在不改变现有代码的情况下,支持新的支付方式了。

⽐如现在需要⽀持 AliPay ,那我们就可以创建 AliPay 这个类(class)并实现(implement)
PaymentStrategy 这个接⼝,如下

class AliPay implements PaymentStrategy {pay(amount: number): void {console.log(`AliPay:${amount}`);}
}
这样⼀来,之后创建的订单就可以使⽤ AliPay 这个⽀付⽅式了。

let order = new Order(1000,new AliPay());
order.pay();

稍等

就上面的代码我要讲一下。

this.paymentStrategy.pay(this.totalAmount)   是什么意思?

它就是利用当前订单对象所持有的支付策略对象来处理支付操作。使用策略模式的好处在于,可以将支付逻辑与订单对象的其他功能分离开来。

TS中的接口的特殊性

        TypeScript中的接口是一个⾮常灵活的概念,除了⽤作类的规范之外,也常⽤于直接描述对象的类型,例如,现有⼀个变量的定义如下:

let person: {name:string, age:number, gender:string} = {name:'张三', age:10, gender:'男'};
⾮常灵活的概念,除了⽤作类的规范之外,也常⽤于直接描述对象的类型,例如,现有⼀个变量的定义如下:
interface Person {name: sting;age: number;gender: string;}let person: Person = {name:'张三', age:10, gender:'男'};

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

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

相关文章

getchar和putchar函数详解

getchar和putchar函数详解 1.getchar函数1.1函数概述1.2函数返回值1.3函数注意事项1.4函数的使用 2.putchar函数2.1函数概述2.2函数返回值2.3函数使用实例 1.getchar函数 1.1函数概述 从一个流中读取一个字符,或者从标准输入中获得一个字符 函数原型: …

Sa-Token框架入门使用

说明:Sa-Token是一个轻量级java权限认证框架(官方语),所谓权限认证框架,就是登录框架,像Shiro、Spring Security。本文介绍Sa-Token框架的入门使用,基于Spring Boot环境。 准备工作 首先&…

滑动窗口 | 1652. 拆炸弹 |LeetCode

文章目录 题目介绍暴力(可以过力扣竟然。不愧是简单题):滑动窗口 祝你天天开心 题目介绍 你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。 为了获得正确的密码,你需要替换掉每…

代码随想录第四十五天|爬楼梯、零钱兑换、完全平方数

题目链接:57. 爬楼梯(第八期模拟笔试) 代码如下: 题目链接:. - 力扣(LeetCode) 代码如下: 题目链接:. - 力扣(LeetCode) 代码如下:…

Vue阶段练习:初始化渲染、获取焦点、记账清单

阶段练习主要承接Vue 生命周期-CSDN博客 ,学习完该部分内容后,进行自我检测,每个练习主要分为效果显示、需求分析、静态代码、完整代码、总结 四个部分,效果显示和准备代码已给出,我们需要完成“完整代码”部分。 练习…

关系型数据库MySql分库分表带来的问题以及解决方案

水平分表 水平分表是什么? 将一张表横向拆分为多张表,拆分的表,依然在同一个库中。 例如,user表有400w条记录,将user表拆分成4张表,每张表100w条记录。拆分后的表名,分别叫做user_0、user1、u…

基于 Linux 自建怀旧游戏之 - 80 款 H5 精品小游戏合集

1)简介 最近又找到了一款宝藏游戏资源分享给大家,包含 80 款 H5 精品小游戏,都是非常有趣味耐玩的游戏,比如 植物大战僵尸、捕鱼达人、贪吃蛇、俄罗斯方块、斗地主、坦克大战、双人五子棋、中国象棋 等等超级好玩的 H5 小游戏&…

CUDA调整指令级原语

在GPU上运行的运算密集型应用程序,处理器的计算吞吐量可以用它在一段时间内执行操作的数量来衡量。因为GPU有很多SIMT指令和计算核心,所以其峰值计算吞吐量通常比其他的处理器高。 对应用程序的吞吐量和正确性进行优化时,理解不同低级原语的…

常见通信协议

1、串口:(串行异步全双工,先发低位) 因为是异步的,所以没有时钟线,因为是全双工,所以有两条数据传输线,实现数据的收发。 帧格式 起始位1位,数据位8位,校验…

【教程】极简Python接入免费语音识别API

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,请不吝给个[点赞、收藏、关注]哦~ 安装库: pip install SpeechRecognition 使用方法: import speech_recognition as srr sr.Recognizer() harvard sr…

LeetCode 面试经典150题 228.汇总区间

题目: 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区…

spring高级篇(九)

boot的执行流程分为构造SpringApplication对象、调用run方法两部分 1、Spring Boot 执行流程-构造 通常我们会在SpringBoot的主启动类中写以下的代码: 参数一是当前类的字节码,参数二是main的args参数。 public class StartApplication {public static…

【Linux IO基础】缓冲区

概念 缓冲区的主要作用是提高效率 --- 提高使用者的效率,因为有缓冲区的存在,我们可以积累一部分再统一发送,提高发送的效率。 刷新方式 缓冲区因为能够暂存数据,必定要有一定的刷新方式: 一般策略: 无…

Flask应用的部署和使用,以照片分割为例。

任务是本地上传一张照片,在服务器端处理后,下载到本地。 服务器端已经封装好了相关的程序通过以下语句调用 from amg_test import main from test import test main() test() 首先要在虚拟环境中安装flask pip install Flask 文件组织架构 your_pro…

基于Spring Boot的民宿管理平台设计与实现

基于Spring Boot的民宿管理平台设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 前台首页功能界面图,在系统首页可以查看首页…

【软件开发规范篇】JAVA后端开发编程规范

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是&#xff0…

视频号小店在行业内的门槛高不高?有门槛是好事还是坏事?

大家好,我是电商小V 现在伴随着时代的慢慢发展,很多人都是想找一个好一点的创业项目,现在找创业项目都是找一些稍微有门槛的项目,没有门槛的话,要不然刚开始去做,项目就泛滥了,项目的红利期直接…

【AI】深度学习框架的期望与现实 机器学习编译尚未兑现其早期的一些承诺……

深度学习框架的期望与现实 机器学习编译尚未兑现其早期的一些承诺…… 来自:Axelera AI 资深软件工程师 Matthew Barrett 原帖是linkedin帖子: https://linkedin.com/posts/matthew-barrett-a49929177_i-think-its-fair-to-say-that-ml-compilation-ac…

Python_4-远程连接Linux

文章目录 使用Python通过SSH自动化Linux主机管理代码执行ls结果:文件传输: 使用Python通过SSH自动化Linux主机管理 在系统管理与自动化运维中,SSH(Secure Shell)是一个常用的协议,用于安全地访问远程计算机…

FTP协议与工作原理

一、FTP协议 FTP(FileTransferProtocol)文件传输协议:用于Internet上的控制文件的双向传输,是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同…