ts:用加减乘除方法配合展示类的继承(extends)

ts:用加减乘除方法配合展示类的继承(extends)

  • 1 主要内容说明
  • 2 例子
    • 2.1 基类的创建
      • 2.1.1 源码1 (基类的创建)
      • 2.1.2 源码1运行效果
    • 2.2 继承基类的参数和方法
      • 2.2.1 源码2(继承基类的参数和方法)
      • 2.2.2 源码2运行效果
    • 2.3 继承基类,添加新方法
      • 2.3.1 源码3(继承基类,添加新方法)
      • 2.3.2 源码3运行效果
    • 2.4 继承基类,添加新参数、方法
      • 2.4.1 源码4(继承基类,添加新参数、方法)
      • 2.4.2 源码6运行效果
  • 3.结语
  • 4.定位日期

1 主要内容说明

类的继承,使用关键字extends继承。子类继承父类,子类可以继承父类的参数和方法,同时添加新的参数和方法。对于一个项目,原本有一些简单的功能,但根据市场发展的需要,需要对项目更新迭代,添加更多的参数和方法,实现更多的功能,并且原项目数据和方法部分需要保留,这时候就可以使用类的继承来开发新方法和功能。对于子类,类中的构造函数使用super关键字继承父类的参数,继承后就可以使用父类的参数。方法的继承格式为,在子类方法中设置super.way_FL(),便可继承父类方法,其中way_FL为父类中的方法。

2 例子

  • 本文选了一个简单的例子,来展示继承的类从简到繁的过程。下边源码1为简单的创建的一个类Calculate,里面设置两参数,只有两参数相加的加法功能。
  • 源码2,类名为Count_1,继承了父类源码1的Calculate类的参数和方法。此时我们函数实例化,使用的是方法way2,而使用效果为继承了父类way1的加法功能。
  • 源码3,类名为Count_2,在继承了父类源码1的Calculate类的参数和方法的同时,使用参数,增加减法、乘法、除法的功能。加法则继承于父类。
  • 源码4,类名为Count_3,继承父类源码3的Count_2类,继承了两数的加减乘除方法。在原有继承上,添加一新参数c,用于实现三数的加减乘除方法。

2.1 基类的创建

简单的创建的一个类Calculate,里面设置两参数,只有两参数相加的加法功能way1。

2.1.1 源码1 (基类的创建)

class Calculate {a: number; // 第一个数字b: number; // 第二个数字constructor(a: number, b: number) {this.a = a; // 初始化第一个数字this.b = b; // 初始化第二个数字}way1(): string {return `${this.a} + ${this.b} = ${this.a + this.b}`; // 返回加法结果}
}// 测试 Calculate 类
let result = new Calculate(764, 467);
console.log(result.way1());

2.1.2 源码1运行效果

在这里插入图片描述

2.2 继承基类的参数和方法

新建Count_1类,继承了父类源码1的Calculate类的参数和方法。此时我们函数实例化,使用的是方法way2,效果为继承了父类way1的加法功能。子类中的构造函数部分,super(值1,值2),相当于初始化父类的值a=值1b=值2。若是值1和值2调换,则函数会根据输入的参数的顺序进行逻辑运算。如正常函数实例化输入参数为(11,5),逻辑运算为11+5,若继承时构造函数部分,调换位置,如 super(值2,值1)时,逻辑运算变为5+11。当然加法无影响,若是减法和除法,结果则会改变。

2.2.1 源码2(继承基类的参数和方法)

class Calculate {a: number; // 第一个数字b: number; // 第二个数字constructor(a: number, b: number) {this.a = a; // 初始化第一个数字this.b = b; // 初始化第二个数字}way1(): string {return `${this.a} + ${this.b} = ${this.a + this.b}`; // 返回加法结果}
}// 测试 Calculate 类
// let result = new Calculate(764, 467);
// console.log(result.way1());class Count_1 extends Calculate {constructor(a_1: number, b_1: number) {super(a_1, b_1); // 调用父类构造函数}way2(): string { // 继承加法return super.way1(); // 调用父类的加法方法}
}// 测试 Count_1 类
let result = new Count_1(764, 467);
console.log(result.way2());

2.2.2 源码2运行效果

在这里插入图片描述

2.3 继承基类,添加新方法

新建Count_2类,继承了父类源码1的Calculate类的参数和方法的同时,使用参数a和b,增加减法way4、乘法way5、除法way6的功能。加法way3则继承于父类way1。

  • 需要注意的是,除法的被除数不能为0。

2.3.1 源码3(继承基类,添加新方法)

class Calculate {a: number; // 第一个数字b: number; // 第二个数字constructor(a: number, b: number) {this.a = a; // 初始化第一个数字this.b = b; // 初始化第二个数字}way1(): string {return `${this.a} + ${this.b} = ${this.a + this.b}`; // 返回加法结果}
}// 测试 Calculate 类
// let result = new Calculate(764, 467);
// console.log(result.way1());class Count_2 extends Calculate {constructor(a_2: number, b_2: number) {super(a_2, b_2); // 调用父类构造函数}way3(): string { // 继承加法return super.way1(); // 调用父类的加法方法}// 添加其他方法way4(): string { // 减法return `${this.a} - ${this.b} = ${this.a - this.b}`; // 返回减法结果}way5(): string { // 乘法return `${this.a} * ${this.b} = ${this.a * this.b}`; // 返回乘法结果}way6(): string { // 除法if (this.b !== 0) {return `${this.a} / ${this.b} = ${this.a / this.b}`; // 返回除法结果} else {return "被除数不能为0!"; // 返回错误信息}}
}// 测试 Count_2 类
let result = new Count_2(764, 467);
console.log(result.way3());
console.log(result.way4());
console.log(result.way5());
console.log(result.way6());

2.3.2 源码3运行效果

在这里插入图片描述

2.4 继承基类,添加新参数、方法

源码3的Count_2类只是两数的加减乘除法,在下边源码4的Count_3类中,在原有源码3的两数加减乘除方法的基础上,添加一新参数c,用于增加实现三数的加减乘除法。

  • 需要注意的是,除法的被除数不能为0。

2.4.1 源码4(继承基类,添加新参数、方法)

class Calculate {a: number; // 第一个数字b: number; // 第二个数字constructor(a: number, b: number) {this.a = a; // 初始化第一个数字this.b = b; // 初始化第二个数字}way1(): string {return `${this.a} + ${this.b} = ${this.a + this.b}`; // 返回加法结果}
}class Count_2 extends Calculate {constructor(a_2: number, b_2: number) {super(a_2, b_2); // 调用父类构造函数}way3(): string { // 继承加法return super.way1(); // 调用父类的加法方法}// 添加其他方法way4(): string { // 减法return `${this.a} - ${this.b} = ${this.a - this.b}`; // 返回减法结果}way5(): string { // 乘法return `${this.a} * ${this.b} = ${this.a * this.b}`; // 返回乘法结果}way6(): string { // 除法if (this.b !== 0) {return `${this.a} / ${this.b} = ${this.a / this.b}`; // 返回除法结果} else {return "被除数不能为0!"; // 返回错误信息}}
}// 测试 Count_2 类
// let result = new Count_2(764, 467);
// console.log(result.way3());
// console.log(result.way4());
// console.log(result.way5());
// console.log(result.way6());class Count_3 extends Count_2 {c: number; // 第三个数字constructor(a_3: number, b_3: number, c_3?: number) {super(a_3, b_3); // 调用父类构造函数this.c = c_3; }way3_3(): string {if (this.c === undefined) {return super.way3(); // 如果 c 为 0,则调用父类的 way3} else {return `${this.a} + ${this.b} + ${this.c} = ${this.a + this.b + this.c}`; // 返回三数相加的结果}}way4_3(): string {if (this.c === undefined) {return super.way4(); // 如果 c 为 0,则调用父类的 way4} else {return `${this.a} - ${this.b} - ${this.c} = ${this.a - this.b - this.c}`; // 返回三数相减的结果}}way5_3(): string {if (this.c === undefined) {return super.way5(); // 如果 c 为 0,则调用父类的 way5} else {return `${this.a} * ${this.b} * ${this.c} = ${this.a * this.b * this.c}`; // 返回三数相乘的结果}}way6_3(): string {// 检查 c 是否未定义if (this.c === undefined) {return super.way6(); // 如果未定义,调用父类的 way6 方法进行除法计算} else {// 如果 c 已定义,则进一步检查其值if (this.c === 0) {return "被除数不能为0!"; // 如果 c 为 0,输出错误信息} else {// 如果 c 不为 0,进行三数相除的计算return `${this.a} / ${this.b} / ${this.c} = ${this.a / this.b / this.c}`;}}}}
// 测试 Count_3 类
let result1 = new Count_3(764, 467);
let result2 = new Count_3(764, 467, 76);console.log(result1.way3_3()); // 调用 way3_3
console.log(result1.way4_3()); // 调用 way4_3
console.log(result1.way5_3()); // 调用 way5_3
console.log(result1.way6_3()); // 调用 way6_3console.log(`\n分隔行-------------------------------\n`);console.log(result2.way3_3()); // 调用 way3_3
console.log(result2.way4_3()); // 调用 way4_3
console.log(result2.way5_3()); // 调用 way5_3
console.log(result2.way6_3()); // 调用 way6_3

2.4.2 源码6运行效果

在这里插入图片描述

3.结语

项目的开发是不是会有很多的框架示范类,其中包含着开发的参数和功能需求,我们需要在此基础上,拓展添加新参数和新功能。或者开发的项目,需要更新迭代,也是需要原有数据方法基础,开发新的方法和功能。
由于笔者的能力有限,创作的内容有所不足在所难免,也敬请读者包涵和指出,万分感谢!

4.定位日期

2024.11.3;
10:39;

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

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

相关文章

Minio 之 内网项目托管Unity Android包体

什么是 MinIO? MinIO 是一个开源的对象存储服务器,旨在提供高性能、高可用性和高扩展性的存储解决方案。它兼容 Amazon S3 API,适用于各种场景,如数据备份、数据归档、大数据分析和机器学习等。 主要特点 兼容性: Mi…

Java中的容器及其区别

|Collection |  ├List |  │-├LinkedList |  │-├ArrayList |  │-└Vector |  │ └Stack |  ├Set |  │├HashSet |  │├TreeSet |  │└LinkedSet | |Map   ├Hashtable   ├HashMap   └WeakHashMap 1、Java中的容器 Java容器类…

论文阅读- --DeepI2P:通过深度分类进行图像到点云配准

目前存在的问题: 单模态配准具有局限性,多模态研究很少跨模态图像到点云配准问题是求解相机坐标系与点云之间的旋转矩阵R ∈ SO(3)和平移向量t ∈ R3。 这个问题很困难,因为由于缺乏点到像素的对应关系,无法使用 ICP、PnP 和捆绑调…

大厂面试真题-如果使用guava limiter实现实例级别的缓存

Guava库中的RateLimiter和Cache是两个不同的组件,分别用于控制访问频率和实现缓存功能。RateLimiter用于流量控制,确保系统在处理请求时不会超过指定的速率,而Cache则用于存储数据以加快访问速度。 由于RateLimiter本身并不直接支持实现缓存…

Air780E如何发送SMS?一文详解!

今天一起来学习使用合宙低功耗4G模组Air780E发送SMS短消息: 一、SMS简介 SMS(短消息服务,ShortMessageService)功能主要用于在蜂窝网络中传输短消息。 在4G网络中,短信可以在数据传输的同时进行,不会因数…

【TC3xx芯片】TC3xx芯片PFlash的ECC校验问题补充

目录 前言 正文 1.PFlash的ECC监控l 1.1. PFlash的监控使能 1.2. PFlash的故障注入 2.DFlash的ECC监控 2.1. DF0 ECC Read Register 2.2. DF0 ECC Status Register 2.3. DF0 ECC Control Register 2.4. DF0 ECC Write Register 2.5. DF0 User Mode Control 3.总结 …

Centos 7系统一键安装宝塔教程

服务器推荐青鸟云服务器,2H2G低至16元/月 官网地址: 所有产品_香港轻量云 2核 2G-A型_青鸟云 推荐Finalshell软件连接至服务器,下载地址: https://dl.hostbuf.com/finalshell3/finalshell_windows_x64.exe 下载完成后连接服务…

知识吾爱纯净版小程序系统 leibiao SQL注入漏洞复现(XVE-2024-30663)

0x01 产品简介 知识吾爱纯净版小程序系统是一款基于微信小程序平台开发的知识付费应用,旨在帮助用户快速建立自己的知识付费平台,实现支付变现和流量主收益。它提供了简洁明了的用户界面和良好的用户体验,同时注重用户隐私保护,确保用户信息的安全存储和传输。 0x02 漏洞…

HTML前端页面设计静态网站

浅浅分享一下前端作业&#xff0c;大佬轻喷~ <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>一个网…

各大自媒体平台的感受 —— 小红书

如果你有些内容&#xff0c;想发布到自媒体平台上&#xff0c;目前有很多平台可用选择。 发布自媒体在获得关注的同时&#xff0c;同时也会期望有些收益。 我们的内容也发布了不少时间了&#xff0c;那就分别扒下各大自媒体平台的吃相&#xff0c;这篇文章说的是小红书。 收…

openEuler下配置openGauss环境图解

一、在openEuler中创建用户&#xff0c;并授予权限 # 创建用户 sudo adduser omm# 授予权限 chown omm /opt# 切换用户 su - omm 二、在openGauss官网找到openGauss极简版的软件包 openGauss软件 | openGauss下载 | openGauss软件包 | openGauss社区 右键立即下载&#xff0…

RabbitMQ 的集群

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ 的集群】面试题&#xff1f;希望对大家有帮助&#xff1b; RabbitMQ 的集群 RabbitMQ 是一种流行的开源消息代理&#xff0c;广泛用于构建分布式系统中的消息队列。随着应用程序规模的扩大&#xff0c;单一的 RabbitMQ 实…

[ 应急响应基础篇 ] Windows 写入任务计划程序详解--任务计划程序窗口写入 命令行写入

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

flinksql-Queries查询相关实战

分组聚合 --分组集 --GROUPING SETS() 允许你定义特定的分组方式&#xff0c;这样你可以选择只对感兴趣的分组进行计算。 --通过手动指定不同的分组组合&#xff0c;你能够灵活地控制数据的聚合结果。 --与 ROLLUP 和 CUBE 不同&#xff0c;GROUPING SETS 不会自动生成所有子集…

泄密与间谍:网络安全与国家安全的紧密联系

在当今数字化时代&#xff0c;网络安全已成为国家安全的重要组成部分。随着信息技术的迅猛发展&#xff0c;网络空间的安全问题愈发突出&#xff0c;泄密和间谍活动对国家安全构成了严峻挑战。本文将探讨泄密与间谍活动的影响&#xff0c;以及为何没有网络安全就没有国家安全。…

使用Git LFS管理大型文件

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Git LFS管理大型文件 引言 Git LFS 简介 安装 Git LFS 安装 Git 安装 Git LFS 配置 Git LFS 初始化 Git 仓库 指定需要使用…

C语言300行-投篮

&#xff03;include "stdio。h" &#xff03;ifdef __APPLE__ #include 〈GLUT/glut。h〉 &#xff03;else &#xff03;include <GL/glut.h> #endif #include 〈stdlib.h> #include <stdio。h〉 #include <math.h〉 #include 〈windows.h〉…

深度学习-梯度消失/爆炸产生的原因、解决方法

在深度学习模型中&#xff0c;梯度消失和梯度爆炸现象是限制深层神经网络有效训练的主要问题之一&#xff0c;这两个现象从本质上来说是由链式求导过程中梯度的缩小或增大引起的。特别是在深层网络中&#xff0c;若初始梯度在反向传播过程中逐层被放大或缩小&#xff0c;最后导…

Linux运行Java程序,并按天输出日志

我们写好的Java程序&#xff08;非web项目&#xff09;&#xff0c;直接在服务器中敲入命令 java -jar app_name.jar就可以运行&#xff0c;如果想让程序一直在服务器中运行&#xff0c;则需要nohup命令。如下&#xff1a; nohup java -jar app_name.jar 如果需要将程序输出的日…

【Clikhouse 探秘】ClickHouse 物化视图:加速大数据分析的新利器

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…