11 # 类:抽象类与多态

news2024/11/16 17:59:34

抽象类

抽象类是不允许被实例化的,只能被继承

abstract class Animal {

}

let animal = new Animal(); // 错误: 不能创建一个抽象类的实例    

class Dog {
    constructor(name: string) {
        this.name = name;
    }
    name: string;
    run() {}
}

let dog = new Dog('Tom');

抽象类的好处就是可以抽离出一些事物的共性,有利于代码的复用和扩展,另外抽象类也可以实现多态。

多态

所谓多态,就是在父类中定义一个抽象方法,在多个子类中对这个方法有不同的实现,在程序运行的时候,会根据不同对象执行不同的操作,这样就是实现了运行时的绑定。

abstract class Animal {
    // 方法复用
    eat() {
        console.log('Animal is eating');
    }
    // 不指定方法具体实现,构成一个抽象方法
    abstract sleep(): void;
}

// let animal = new Animal(); // 错误: 不能创建一个抽象类的实例    

class Dog extends Animal {
    constructor(name: string) {
        super(); // 调用父类的构造函数
        this.name = name;
    }
    name: string;
    run() {}
    sleep() {
        console.log('Dog is sleeping');
    } // 实现抽象方法
}

let dog = new Dog('Tom');
dog.eat(); // 输出: Animal is eating

class Cat extends Animal {
    sleep() {
        console.log('Cat is sleeping');
    } // 实现抽象方法
}

let cat = new Cat();

let animals: Animal[] = [dog, cat];
animals.forEach(a => a.sleep()); // 输出: Dog is sleeping, Cat is sleeping

在这里插入图片描述

this 类型

类的成员方法可以直接返回一个 this,这样就可以很方便的实现链式调用。

class WorkFlow {
    step1() {
        return this;
    }
    step2() {
        return this;
    }
}

new WorkFlow().step1().step2(); // 链式调用

在继承的时候,this 的类型也可以表现出多态,这里的多态是指 this 既可以是父类型,也可以是子类型。

class WorkFlow {
    step1() {
        return this;
    }
    step2() {
        return this;
    }
}

new WorkFlow().step1().step2(); // 链式调用

class MyFlow extends WorkFlow{
    next() {
        return this;
    }
}

new MyFlow().next().step1().next().step2();

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

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

相关文章

【野火i.MX6NULL开发板】ARM-GCC 和开发板的 HelloWorld(ubuntu主机和野火开发板debian交叉编译)、开发板的/mnt里没文件

0、前言 参考资料: 《野火 Linux 基础与应用开发实战指南基于 i.MX6ULL 系列》PDF 第24章 参考视频: https://www.bilibili.com/video/BV1JK4y1t7io?p26&vd_sourcefb8dcae0aee3f1aab700c21099045395 注意,一定要记得把虚拟机的网络适配…

【扩散模型】10、ControlNet | 用图像控制图像的生成(ICCV2023)

论文:Adding Conditional Control to Text-to-Image Diffusion Models 代码:https://github.com/lllyasviel/ControlNet 出处:ICCV2023 Best Paper | 斯坦福 时间:2023.02 一、背景 文本到图像的生成尽管已经有很好的效果&…

拦截器的配置

1、什么是拦截器? Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、判断用户是否登录等。 拦截器依赖于web框…

Git仓库管理笔记

问题: hint: the same ref. If you want to integrate the remote changes, use Done 解决: 解决方法: 1、先使用pull命令: git pull --rebase origin master 2、再使用push命令: git push -u origin master

关于Python —— Python教程

开始 Python 是一个易于学习、使用和高效阅读的编程语言。它具有简洁的英文语法,编写更少的代码,让程序员专注于业务逻辑而不是语言本身。 本教程将从深度、专注细节上去理解 Python 这门语言。初学者可以参考此教程理解相应的内容,本教程将…

服务异步通讯——RabbitMQ

文章目录 RabbitMQ异步通讯技术对比 安装RabbitMQ下载镜像 安装MQRabbitMQ消息模型入门案例publisher实现consumer实现总结 SpringAMQPBasic Queue 简单队列模型消息发送消息接收 WorkQueue消息发送消息接收测试总结 发布/订阅Fanout声明队列和交换机消息发送消息接收 Direct基…

数据结构学习 jz66 构建乘积数组

关键词:数学 双指针 方法一:这个题目我一开始做不知道不能用除法。我做的:[ 用时: 12 m 12 s ] 用了除法 分类讨论 方法二:后来看了提示,双指针,两边各开始乘。 方法三:然后又看了答案可以节…

特征工程-特征处理(二)

特征处理 二、时间特征处理 将原本的具体时间拆分为年月日等多个特征变量,同时可以引入在一天的某个时间段,或者是当天是否为节假日等其他条件,还可以进一步结合其他特征,进行前后一个时间段或是多个时间段时间的特征差值。 dt.…

常见的反爬虫风控 | 验证码风控

一.前言 在当今信息技术迅速发展的背景下,网站和在线服务面临着日益增长的自动化访问威胁,这些大多来自于各类爬虫程序。这种大量的自动化访问不仅对网站的正常运行构成压力,还可能导致敏感数据的泄露,甚至被用于不正当竞争和恶意…

【华为OD机试真题2023CD卷 JAVAJS】查找一个有向网络的头节点和尾节点

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 查找一个有向网络的头节点和尾节点 知识点图DFS搜索 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 给定一个有向图,图中可能包含有环,图使用二维矩阵表示,每一行的第一列表示起始节点,第二列表示终止节…

ubuntu22: nvtop no gpu to monitor.

解决方法: 重新下载nvtop sudo apt update sudo apt -y install nvtop真是逆天 ,ubuntu系统的nvidia driver突然坏了,然后我重装了nvidia driver, 之后用nvtop就出现这个问题了,但是逆天的是我竟然没有搜到一篇中文的帖子讲这个问…

自己动手写一个 Arthas 在线诊断工具系列说明

相关文章: 自己动手写一个分库分表中间件(十)线上优化之数据库连接超时优化自己动手写分布式任务调度框架自己动手写 Java 虚拟机(二)-查找 Class 文件自己动手调试 JDK(CLion)Java Agent 的简…

Linux网络文件共享服务之FTP协议

目录 一、存储类型 1、直连式存储(DAS) 2、存储区域网络(SAN) 3、网络附加存储(NAS) 二、 FTP文件传输协议 1、FTP协议的工作原理 1.1 FTP协议的工作流程 1.2 FTP协议的两种工作模式 1.2.1 主动模…

6314A/B/C 稳定光源

01 6314A/B/C 稳定光源 产品综述: 6314系列稳定光源包括6314A稳定光源(1310NM单波长)、6314B稳定光源(1550NM单波长)、6314C稳定光源(1310NM &1550NM双波长)。6314系列稳定光源采用高精度自动功率控制技术和自动温度控制技术。6314系列稳定光源配备多种模块&…

Mysql中设置只允许指定ip能连接访问(可视化工具的方式)

场景 Mysql中怎样设置指定ip远程访问连接: Mysql中怎样设置指定ip远程访问连接_navicat for mysql 设置只有某个ip可以远程链接-CSDN博客 前面设置root账户指定ip能连接访问是通过命令行的方式,如果通过可视化工具比如Navicat来实现。 注&#xff1a…

二叉树题目:从前序与后序遍历序列构造二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:从前序与后序遍历序列构造二叉树 出处:889. 从前序与后序遍历序列构造二叉树 难度 7 级 题目描述…

7_1 tesseract 安装及使用

1、 安装tesseract   OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。对于图形验证码来说,它们都是一些不规则的字符,这些字符确实是由字…

运筹说 第99期 | 非线性规划—最优性条件

通过上期学习,大家已经了解了非线性规划中无约束极值问题及其求解方法。本期小编将为大家介绍最优性条件,包括可行下降方向、库恩-塔克条件等内容。 1 可行下降方向 起约束作用 假定X(0)是上述问题的一个可行解,满足所有约束。对某约束条件g…

2024年,如何打造惊艳的个人博客/出版系统并且赚点小钱?

几年前,我就推荐过用Markdown写作静态博客。静态博客几乎是零托管成本,比较适合个人博客起步。Markdown便于本地搜索,也可当作是个人知识库方案。 现在有了新的进展。我不仅构建了一个视觉上相当不错的个人网站,还美化了github、…

Linux/Frolic

Enumeration nmap 还是扫描系统对外开放的端口情况,对外开放了22,139,445,还有9999端口,显示是http服务,使用了nginx 1.10.3 ┌──(kali㉿kali)-[~/HTB/Frolic] └─$ nmap -sC -sV -oA nmap -Pn 10.10.10.111 Starting Nmap 7.93 ( http…