TypeScript中abstract抽象类、抽象成员

news2024/9/21 2:44:20

TypeScript也支持定义抽象类和抽象类成员。抽象类和抽象类成员都使用abstract关键字来定义

  • 抽象类可以不包含抽象方法,但抽象方法必须存在于抽象类中
  • 抽象方法只能定义,不能实现,即没有函数体
  • 抽象类不能被直接使用,只能被继承,非抽象子类必须实现父类的抽象方法和抽象属性
  • 抽象类类似于类的模板,实现规范的代码定义

 

抽象类 

定义抽象类时,只需要在class关键字之前添加abstract关键字即可,如:abstract class A{}

抽象类与具体类的一个重要区别是,抽象类不能被实例化。也就是说,不允许使用new运算符来创建一个抽象类的实例

抽象类的作用是作为基类使用,派生类可以继承抽象类。

抽象类也可以继承其他抽象类

抽象类中允许(通常)包含抽象成员,也允许包含非抽象成员 

abstract class Person {
  // 正常.抽象方法只能定义,不能实现,即没有函数体
  abstract move(): void;
  run(): void {
    console.log("跑步");
  }

  // 异常
  eat(): void; //函数实现缺失或未立即出现在声明之后
}

class User extends Person {
  public move(): void {
    console.log("移动");
  }
}

const u = new User();
console.log("u.move():", u.move());

const p = new Person(); // 无法创建抽象类的实例

 抽象成员

 在抽象类中允许声明抽象成员,抽象成员不允许包含具体实现代码

// 以下用法均为正确用法
abstract class A {
  abstract a: string;
  abstract test(): string;

  abstract get accessor(): string;
  abstract set accessor(value: string);
}

abstract class B {
  // 编译错误!抽象方法不能带有具体实现
  abstract test() { }
  abstract b: number = 0;

  // 编译错误!抽象存取器不能带有具体实现
  abstract get c(): string { return ''; };
  abstract set c(value: string) { };
}

 如果一个具体类继承了抽象类,那么在具体的派生类中必须实现抽象类基类中的所有抽象成员。因此,抽象类中的抽象成员不能声明为private,否则将无法在派生类中实现该成员。

abstract class A {
  abstract a: string;
  abstract test(): boolean;

  abstract get accessor(): string;
  abstract set accessor(value: string);
}

class B extends A {
  // 实现抽象属性 a
  a: string = '';

  // 实现抽象方法 test
  test(): boolean {
    return true;
  }

  // 实现抽象存取器accessor
  private _accessor: string = 'www.baidu.com';

  get accessor(): string {
    return this._accessor;
  }
  set accessor(value: string) {
    this._accessor = value;
  }
}


 

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

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

相关文章

Spring Boot学习篇(五)

Spring Boot学习篇(五) mybatis-plus使用 1.1 配置pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:s…

《设计模式》代理模式

《设计模式》设计模式的基本原则 《设计模式》单例模式 《设计模式》工厂模式 《设计模式》原型模式 《设计模式》建造者模式 《设计模式》适配器模式 《设计模式》桥接模式 《设计模式》装饰者模式 《设计模式》组合模式 《设计模式》外观模式 《设计模式》享元模式 《设计模式…

HTML5和CSS3 WEB技术开发

HTML5和CSS3 WEB技术开发 B站视频参考&#xff1a;https://www.bilibili.com/video/BV1H44y1k7ze/ 课程目标&#xff1a; 使用HTML5进行网站布局使用CSS3进行网站美化开发精美的商业网站 第一章 HTML5基础 概念&#xff1a; ​ 网页 &#xff1a;互联网的基础&#xff0c;网…

requests请求库(爬取)

文章目录requests模块链接拼接&#xff08;params参数&#xff09;UA伪装&#xff08;headers参数&#xff09;POST请求页面局部信息爬取&#xff08;GET&#xff09;爬取国家药品监督管理监督总局中基于中华人民共和国化妆品生产许可证相关数据爬取图片爬虫分类通用爬虫&#…

分布式存储从FastDFS切换到Minio

什么是Minio 基于官网的介绍如下&#xff1a;MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。 从官网的介绍可以看出Minio是一款和FastDFS类似的工具&#xff0c;分布式存储系统。目前在使…

运行MAT项目环境配置中出现的问题及参考方案

MAT项目是用于修复图片中缺失的部分&#xff1a;及为图像中缺失的区域产生视觉吸引力和语义适当的内容。 项目链接&#xff1a;GitHub - fenglinglwb/MAT: MAT: Mask-Aware Transformer for Large Hole Image InpaintingMAT: Mask-Aware Transformer for Large Hole Image Inp…

国内有没有可以全职远程办公的程序员工作?

明作为一个曾经靠兼职开发远程办公来赚钱的程序员&#xff0c;既碰到过无良甲方&#xff0c;开发完了不结尾款&#xff0c;最后通过法律手段才解决问题&#xff1b;也接过自称甲方的中介单&#xff0c;耗费心力拿到尾款&#xff0c;最后发现人家拿的钱比自己还多......这一路兼…

方格取数--数字三角形dp问题

项目场景&#xff1a; 线性dp 数字三角形类问题 问题描述 设有 NN 的方格图&#xff0c;我们在其中的某些方格中填入正整数&#xff0c;而其它的方格中则放入数字0。如下图所示&#xff1a; 某人从图中的左上角 A 出发&#xff0c;可以向下行走&#xff0c;也可以向右行走&am…

WebGL及Threejs学习介绍

一、学习背景及实现的效果 这十年来Web得到了飞速的发展&#xff0c;随着WebGL的普及&#xff0c;网页的表现能力越来越强大&#xff0c;网页上已经可以开始做出很多复杂的动画、精美的效果&#xff1b;还能通过WebGL在网页中绘制高性能的3d图形。随着浏览器的性能和网络、带宽…

github实用搜索技巧

github搜索指令教程一. in:根据某个关键词来进行检索1.关键词:name: 项目名称description : 项目描述readme : 项目帮助文档语法 &#xff1a;language:xx(检索什么语言的内容)组合检索二.根据stars||forks||pushed关键字查找1.数量范围: xxx关键词 stars:>或者:<2.区间范…

Pytorch 数据操作

神经网络所处理的数据类型都为tensor类型数据&#xff0c;我们首先需要导入库torch import torch 使用 arange 创建一个行向量 x。这个行向量包含以0开始的前12个整数&#xff0c;它们默认创建为整数。除非额外指定&#xff0c;新的张量将存储在内存中&#xff0c;并采用基于…

进程替换心得

进程替换 1️⃣ 什么是进程替换 1.我们想让子进程不执行父进程部分代码&#xff0c;执行新的程序时我们需要进行进程替换。 ** 程序替换的原理 ** &#xff1a; 将磁盘中的程序&#xff0c;加载入内存结构。重新建立页表映射&#xff0c;谁执行程序替换就程序建立谁的映射(子…

redis 的 java 客户端

Jedis 客户端 1&#xff09;引入依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…

【Vim】Vim 常用编辑操作

目录 正则表达式 vim 命令 vim的工作模式 撤销修改、重做与保存 光标移动命令 文本插入操作 文本删除操作 文本复制、剪切与粘贴 文本的修改与替换 多窗口操作 正则表达式 简单地说&#xff0c;正则表达式是一种符号表示法&#xff0c;用于识别文本模式。在某种程度上…

Python--栈与队列的相互实现

我们都知道这两个数据结构很相似,但是又有差别, 就好像是对立统一的一样. 栈是一种后进先出的数据结构&#xff0c;元素从顶端入栈&#xff0c;然后从顶端出栈。 队列是一种先进先出的数据结构&#xff0c;元素从后端入队&#xff0c;然后从前端出队。 首先我们都知道用Python的…

leetcode--动态规划问题

动态规划1.基本动态规划 一维&#xff08;1&#xff09;爬楼梯(70)&#xff08;2&#xff09;打家劫舍(198)&#xff08;3&#xff09;等差数列划分(413)2.基本动态规划 二维&#xff08;1&#xff09;最小路径和(64)&#xff08;2&#xff09;01 矩阵(542)&#xff08;3&#…

02SpringCloudAlibaba服务注册中心—Eureka

推荐与对比观看&#xff1a;003SpringCloud---Eureka_gh_xiaohe的博客-CSDN博客 服务提供者 1、 2、pom.xml 3、改yum 4、主启动 5、业务类 测试1&#xff1a; 访问&#xff1a; 服务消费者 1、 2、pom.xml 3、改yum 4、主启动 5、业务类 config controller 测…

【代码封装 center和bounds介绍 Objective-C语言】

一、继续上篇文章的例子 1.刚才我们说了,这个“上下左右”无非就是移动一下frame而已 但是,我们发现,“上下左右”四个功能,我们写了4个方法, 这样做的话,有点儿太繁琐了 所以呢,接下来我们想个办法,能不能把这四个方法,封装一下 封装成1个呢,不要这么多 我们先…

使用Alfred + Gitee搭建免费图床

环境 系统: Mac 工具: Alfred, git, homebrew, pngpaste. 语言: perl 其他: Gitee 工具下载 https://gitee.com/serpmelon/inazuma 思路 使用Gitee仓库作为图床, 使用Alfred工作流简化上传图片流程, 并将上传图片地址转换为markdown格式输出到剪切板中. 使用 复制一张图…

植物大战僵尸:无冷却分析方法

植物大战僵尸这款游戏可以说是很多90后的回忆了&#xff0c;基本上只要是90后或多或少的都接触过&#xff0c;而玩游戏与制作辅助是两个概念&#xff0c;今天我将给大家分享一些游戏辅助方面的制作技巧&#xff0c;来供大家参考。 植物无冷却的实现 根据上节课查找太阳花生产…