当前位置: 首页 > news >正文

ts -> class -> abstract

在TypeScript中,你可以直接使用abstract关键字来定义抽象类和抽象方法。抽象类不能被实例化,而抽象方法必须在派生类中被实现。以下是一个具体的例子:

abstract class Animal {name: string;constructor(name: string) {this.name = name;}// 抽象方法,不需要实现具体功能abstract speak(): string;// 可以有非抽象方法move(distanceInMeters: number = 0): void {console.log(`${this.name} moved ${distanceInMeters}m.`);}
}// 具体子类 Dog,继承自抽象类 Animal
class Dog extends Animal {constructor(name: string) {super(name);}// 实现抽象方法speak(): string {return `${this.name} says Woof!`;}
}// 另一个具体子类 Cat,同样继承自抽象类 Animal
class Cat extends Animal {constructor(name: string) {super(name);}// 实现抽象方法speak(): string {return `${this.name} says Meow!`;}
}// 尝试实例化抽象类 Animal 将会得到编译时错误
// const animal = new Animal('Generic');// 实例化具体子类
const dog = new Dog('Rex');
console.log(dog.speak()); // 输出: Rex says Woof!
dog.move(5);const cat = new Cat('Felix');
console.log(cat.speak()); // 输出: Felix says Meow!
cat.move();

在这个例子中,Animal 是一个抽象类,它包含了一个抽象方法 speak() 和一个普通方法 move()DogCat 类继承自 Animal 并且都必须实现 speak() 方法(是必须,不然会报错)如果你试图直接实例化 Animal 类,TypeScript 编译器会报错,因为抽象类不能被实例化只有当子类实现了所有抽象方法之后,才能被正确地实例化和使用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CID引流-拼多多案例
  • 前端系列-7 Vue3响应式数据
  • 【简历】吉林某一本大学:JAVA秋招简历指导,简历通过率比较低
  • maven archetype
  • LeetCode 热题 HOT 100 (011/100)【宇宙最简单版】
  • 代码随想录算法训练营DAY64|拓扑排序、dijkstra(朴素版)
  • 基因组挖掘指导天然药物分子的发现-文献精读34
  • MongoDB教程(十五):MongoDB原子操作
  • 【系列专题】新质生产力之光,照亮“制造强国”之路
  • 【SpringBoot】URL映射之consumes和produces匹配、params和header匹配
  • go-kratos 学习笔记(1) 安装
  • 【数据结构】树和二叉树
  • InternLM学习笔记
  • 图解RocketMQ之消息模型详解(1)
  • Java程序中常见问题
  • ES6指北【2】—— 箭头函数
  • 【Amaple教程】5. 插件
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CEF与代理
  • docker容器内的网络抓包
  • flutter的key在widget list的作用以及必要性
  • Joomla 2.x, 3.x useful code cheatsheet
  • nginx 配置多 域名 + 多 https
  • Python进阶细节
  • Webpack 4x 之路 ( 四 )
  • 程序员最讨厌的9句话,你可有补充?
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 深度解析利用ES6进行Promise封装总结
  • 十年未变!安全,谁之责?(下)
  • 原生Ajax
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • Prometheus VS InfluxDB
  • puppet连载22:define用法
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (31)对象的克隆
  • (42)STM32——LCD显示屏实验笔记
  • (C#)获取字符编码的类
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (回溯) LeetCode 46. 全排列
  • (十六)一篇文章学会Java的常用API
  • (五)MySQL的备份及恢复
  • .net core Swagger 过滤部分Api
  • .net6+aspose.words导出word并转pdf