TypeScript 从入门到进阶之基础篇(十) 抽象类篇

请添加图片描述

系列文章目录

TypeScript 从入门到进阶系列

  1. TypeScript 从入门到进阶之基础篇(一) ts基础类型篇
  2. TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇
  3. TypeScript 从入门到进阶之基础篇(三) 元组类型篇
  4. TypeScript 从入门到进阶之基础篇(四) symbol类型篇
  5. TypeScript 从入门到进阶之基础篇(五) 枚举类型篇
  6. TypeScript 从入门到进阶之基础篇(六) 类型(断言 、推论、别名)| 联合类型 | 交叉类型 篇
  7. TypeScript 从入门到进阶之基础篇(七)泛型篇
  8. TypeScript 从入门到进阶之基础篇(八)函数篇
  9. TypeScript 从入门到进阶之基础篇(九) Class类篇
    持续更新中…

文章目录

  • 系列文章目录
  • TypeScript 从入门到进阶系列
  • 前言
  • 一、抽象类(abstract)的使用
  • 二、抽象类(abstract)的使用场景


前言

TypeScript 抽象类是一种用于定义其他类的基础类,它不能直接被实例化,只能被继承。抽象类可以包含属性、方法、以及其他抽象方法的定义。抽象方法只有定义而没有具体实现,需要在具体的子类中实现。


一、抽象类(abstract)的使用

抽象类通过使用关键字 abstract 来定义,而抽象方法通过在方法前加上关键字 abstract 来定义。抽象类和抽象方法用于定义类的行为和结构,并且可以提供一些通用的实现或规范,以供子类继承和实现。

抽象类在面向对象编程中有以下特点:

  1. 不能直接实例化:抽象类不能被直接实例化只能被继承后使用。
  2. 可以包含属性和方法:抽象类中可以定义属性和方法,可以有具体实现的方法和抽象方法。
  3. 可以包含抽象方法:抽象类中可以定义抽象方法,这些方法只有方法的声明而没有具体实现,需要在具体的子类中实现。
  4. 子类必须实现抽象方法:当一个类继承了抽象类时,它必须实现抽象类中的所有抽象方法。

下面是一个使用抽象类的例子:

//抽象类
abstract class Animal {name: string;constructor(name: string) {this.name = name;}//抽象方法  只能有方法的声明而没有具体实现//要实现只能在继承此类之后去实现abstract makeSound(): void;move(distance: number = 0) {console.log(`${this.name} moved ${distance}m`);}
}//Dog 继承 Animal 抽象类
class Dog extends Animal {constructor(name: string) {super(name);}//将Animal 抽象类中的 抽象方法 进行实例化makeSound() {console.log(`${this.name} barks`);}
}let dog = new Dog('Buddy');
dog.makeSound();  // 输出: "Buddy barks"
dog.move(10);    // 输出: "Buddy moved 10m"

在这个例子中,Animal 类是一个抽象类,它有一个抽象方法 makeSound 和一个实现方法 moveDog 类继承了 Animal 类,并实现了 makeSound 方法。

你不能直接实例化抽象类,但可以通过继承抽象类的方式创建实例。在这个例子中,我们创建了一个名为 dogDog 类的实例,并调用了它的 makeSoundmove 方法。

二、抽象类(abstract)的使用场景

TypeScript抽象类的使用场景:

  1. 抽象类可以被用作基类,它提供了一个通用的模板或蓝图,用于派生出其他类。
  2. 抽象类可以定义抽象方法,这些方法在派生类中必须被实现。这样可以确保派生类具有某些特定的功能或行为。
  3. 抽象类可以实现一些通用的功能,而不用在每个派生类中重新实现这些功能。这样可以使代码更加可维护和可扩展。
  4. 抽象类可以用于限制实例化。它们不能直接被实例化,只能被用作继承。
  5. 抽象类可以定义属性和方法,这些属性和方法可以被派生类继承和重写。

总之,抽象类在需要定义一个通用模板或蓝图,并确保派生类具有某些特定功能或行为的情况下非常有用。它们可以提供代码重用、可维护性和可扩展性。

一个常见的应用场景案例是在Web应用开发中使用抽象类来建模和组织组件。

假设我们正在开发一个在线购物应用,其中有多种类型的商品,例如电子产品、服装和食品。我们可以使用抽象类来定义一个通用的商品类,并为每种具体类型的商品创建一个子类。

首先,我们定义一个抽象商品类:

abstract class Product {protected name: string;protected price: number;constructor(name: string, price: number) {this.name = name;this.price = price;}abstract getDescription(): string;
}

然后,我们创建几个具体类型的商品类:

class Electronics extends Product {protected brand: string;constructor(name: string, price: number, brand: string) {super(name, price);this.brand = brand;}getDescription(): string {return `This ${this.brand} ${this.name} costs $${this.price}`;}
}class Clothing extends Product {protected size: string;constructor(name: string, price: number, size: string) {super(name, price);this.size = size;}getDescription(): string {return `This ${this.size} ${this.name} costs $${this.price}`;}
}class Food extends Product {protected expirationDate: string;constructor(name: string, price: number, expirationDate: string) {super(name, price);this.expirationDate = expirationDate;}getDescription(): string {return `This ${this.name} expires on ${this.expirationDate}`;}
}

现在,我们可以使用这些具体类型的商品类创建实例,并调用它们的getDescription方法来获取商品的描述:

const iphone = new Electronics('iPhone', 999, 'Apple');
console.log(iphone.getDescription()); // 输出: This Apple iPhone costs $999const shirt = new Clothing('T-Shirt', 29, 'M');
console.log(shirt.getDescription()); // 输出: This M T-Shirt costs $29const milk = new Food('Milk', 2.99, '2022-01-31');
console.log(milk.getDescription()); // 输出: This Milk expires on 2022-01-31

这个例子中,抽象类Product定义了一个共享的属性和方法,而具体的商品类继承了这些属性和方法,并根据自己的特性实现了getDescription方法。一个常见的应用场景案例是在Web应用开发中使用抽象类来建模和组织组件。

假设我们正在开发一个在线购物应用,其中有多种类型的商品,例如电子产品、服装和食品。我们可以使用抽象类来定义一个通用的商品类,并为每种具体类型的商品创建一个子类。

首先,我们定义一个抽象商品类:

abstract class Product {protected name: string;protected price: number;constructor(name: string, price: number) {this.name = name;this.price = price;}abstract getDescription(): string;
}

然后,我们创建几个具体类型的商品类:

class Electronics extends Product {protected brand: string;constructor(name: string, price: number, brand: string) {super(name, price);this.brand = brand;}getDescription(): string {return `This ${this.brand} ${this.name} costs $${this.price}`;}
}class Clothing extends Product {protected size: string;constructor(name: string, price: number, size: string) {super(name, price);this.size = size;}getDescription(): string {return `This ${this.size} ${this.name} costs $${this.price}`;}
}class Food extends Product {protected expirationDate: string;constructor(name: string, price: number, expirationDate: string) {super(name, price);this.expirationDate = expirationDate;}getDescription(): string {return `This ${this.name} expires on ${this.expirationDate}`;}
}

现在,我们可以使用这些具体类型的商品类创建实例,并调用它们的getDescription方法来获取商品的描述:

const iphone = new Electronics('iPhone', 999, 'Apple');
console.log(iphone.getDescription()); // 输出: This Apple iPhone costs $999const shirt = new Clothing('T-Shirt', 29, 'M');
console.log(shirt.getDescription()); // 输出: This M T-Shirt costs $29const milk = new Food('Milk', 2.99, '2022-01-31');
console.log(milk.getDescription()); // 输出: This Milk expires on 2022-01-31

这个例子中,抽象类Product定义了一个共享的属性和方法,而具体的商品类继承了这些属性和方法,并根据自己的特性实现了getDescription方法。

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

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

相关文章

rust获取本地外网ip地址的方法

大家好,我是get_local_info作者带剑书生,这里用一篇文章讲解get_local_info的使用。 get_local_info是什么? get_local_info是一个获取linux系统信息的rust三方库,并提供一些常用功能,目前版本0.2.4。详细介绍地址&a…

分子动力学模拟—LAMMPS 模拟(固体和液体)数据后处理软件(六)

记录一下检索到一篇分子动力学模拟数据后处理的软件。 感谢论文的原作者! 主要功能: Structure Analysis Ackland Jones Analysis CentroSymmetry Parameter Common Neighbor Analysis Common Neighbor Parameter Atomic Structure Entropy Stein…

HTTP超详细介绍

HTTP讲解 1.HTTP的介绍2.HTTP协议的特点3.HTTP工作原理4.HTTP三点注意事项5.HTTP消息结构6.客户端请求消息7.服务端响应消息8.HTTP请求方法9.HTTP 响应头信息10.HTTP 状态码(HTTP Status Code)10.1.下面是常见的HTTP状态码10.2.HTTP状态码分类10.3.HTTP状…

Mysql深度分页优化的一个实践

问题简述: 最近在工作中遇到了大数据量的查询场景, 日产100w左右明细, 会查询近90天内的数据, 总数据量约1亿, 业务要求支持分页查询与导出. 无论是分页或导出都涉及到深度分页查询, mysql通过limit/offset实现的深度分页查询会存在全表扫描的问题, 比如offset1000w, limit10…

自定义C#类库(.dll文件)

环境配置 操作系统:Windows 10 开发工具:Visual Studio 2022 .Net桌面开发环境: 开发步骤 (一)创建C#类库项目 (二)配置项目名称和项目路径 (三)选择所使用的框架&a…

tinyxml2

使用tinyxml2,得知道一些xml基础 xml tutorial--菜鸟 tinyxml2类对象 链接 结构 XMLNode 什么是节点 节点:元素、声明、文本、注释等。 XMLDocument xml文档(文件)对象。 作用: 加载xml文件, tinyxml2作用 先定义两个宏 …

第二讲_HarmonyOS应用创建和运行

HarmonyOS应用创建和运行 1. 创建一个HarmonyOS应用2. 运行新项目2.1 创建本地模拟器2.2 启动本地模拟器2.3 在本地模拟器运行项目 1. 创建一个HarmonyOS应用 打开DevEco Studio,在欢迎页单击Create Project,创建一个新工程。 选择创建Application应用。…

RT Thread Stdio生成STM32L431RCT6工程后如何修改外部时钟

一、简介 RT Thread Stdio生成STM32L431RCT6工程后默认为内部时钟,如何修改为外部时钟呢? 二、修改时钟步骤 本方案修改外部时钟为直接修改代码,不通过STM32CubeMX 进行配置(使用这个软件会编译出错) (…

【GaussDB数据库】序

参考链接1:国产数据库华为高斯数据库(GaussDB)功能与特点总结 参考链接2:GaussDB(DWS)介绍 GaussDB简介 官方网站:云数据库GaussDB GaussDB是华为自主创新研发的分布式关系型数据库。该产品支持分布式事务,…

【控制篇 / 分流】(7.4) ❀ 01. 对指定IP网段访问进行分流 ❀ FortiGate 防火墙

【简介】公司有两条宽带,一条ADSL拨号用来上网,一条移动SDWAN,已经连通总部内网服务器,领导要求,只有访问公司服务器IP时走移动SDWAN,其它访问都走ADSL拨号,如果你是管理员,你知道有…

麒麟KYLINOS域名解析失败的修复方法

原文链接:麒麟KYLINOS域名解析失败的修复方法 hello,大家好啊!今天我要给大家介绍的是在麒麟KYLINOS操作系统上修复域名解析的方法。在日常使用中,我们可能会遇到由于系统配置问题导致的域名解析失败,这在内网环境下尤…

京东获得JD商品详情 API (jd.item_get):电商发展中的中重要性

数据整合与同步:对于许多电商企业来说,商品数据的管理是一个重要的环节。通过JD商品详情API,商家可以方便地获取京东平台上的商品详情,实现数据的整合与同步。这有助于确保商品信息的准确性,提高库存管理和订单处理的效…

回馈科教,非凸科技助力第48届ICPC亚洲区决赛

1月12日-14日,“华为杯”第48届国际大学生程序设计竞赛(ICPC)亚洲区决赛在上海大学成功举办。非凸科技作为此次赛事的支持方之一,希望携手各方共同推动计算机科学和技术的发展。 这是一场智慧的巅峰对决,320支优秀队伍…

超级详细的linux centos NFS共享服务器搭建

目录 背景说明: 1.服务端操作 1.1创建目录 1.2创建组 1.3创建用户 1.4目录授权给www:www 1.5安装nfs服务端 1.6配置权限 1.7启动服务 2.客户端操作 2.1安装软件 2.2创建目录 2.3挂载 2.4测试 2.4.1读写删除测试 2.4.1只读测试 背景说明: 看了一个帖子NFS教程,…

边缘计算AI智能分析网关V4客流统计算法的概述

客流量统计AI算法是一种基于人工智能技术的数据分析方法,通过机器学习、深度学习等算法,实现对客流量的实时监测和统计。该算法主要基于机器学习和计算机视觉技术,其基本流程包括图像采集、图像预处理、目标检测、目标跟踪和客流量统计等步骤…

wins安装paddle框架

一、安装 https://www.paddlepaddle.org.cn/install/quick?docurl/documentation/docs/zh/install/pip/windows-pip.html 装包(python 的版本是否满足要求: 3.8/3.9/3.10/3.11/3.12, pip 版本为 20.2.2 或更高版本 ) CPU 版:…

基于Python+django影片数据爬取与数据分析设计与实现

目录 一、 前言介绍: 二 、功能设计: 三、功能实现: 系统登录实现 管理员实现 用户模块实现 四、库表设计: 五、关键代码: 六、论文参考: 七、其他案例: 八、源码获取: 一…

canvas绘制不同样式的五角星(图文示例)

查看专栏目录 canvas实例应用100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

gateway Redisson接口级别限流解决方案

文章目录 前言1. 计数器算法(固定窗口限流器)2. 滑动窗口日志限流器3. 漏桶算法(Leaky Bucket)4. 令牌桶算法(Token Bucket)5. 限流队列应用场景实现工具 一、Redisson简介二、Redisson限流器的原理三、Red…

5-微信小程序语法参考

1. 数据绑定 官网传送门 WXML 中的动态数据均来自对应 Page 的 data。 数据绑定使用 Mustache 语法&#xff08;双大括号&#xff09;将变量包起来 ts Page({data: {info: hello wechart!,msgList: [{ msg: hello }, { msg: wechart }]}, })WXML <view class"vie…