typescript 中的类、继承、修饰符、静态属性方法、抽象类、多态

1、ts 中类的定义

class Person {
    name: string; // 属性 前面省略了public关键词
    constructor(name: string) {  // 构造函数  实例化的时候触发的方法
        this.name = name
    }
    getName(): string {
        return this.name
    }
    setName(name: string): void {
        this.name = name
    }
}
let p = new Person('lilies')
p.setName('88')
console.log(p.getName());

2、ts 中实现继承

 父类与子类有同样的方法,在调用子类方式时,先找子类的方法

class Person {
    name: string
    constructor(name: string) {
        this.name = name
    }
    run(): string {
        return `${this.name}父类`
    }
}

class Web extends Person {
    constructor(name: string) {
        super(name) // 初始化父类的构造函数
    }
    run(): string {
        return `${this.name}子类`
    }
    work() {
        console.log(`${this.name}工作`);
    }
}
let w = new Web('11')
console.log(w.run());
w.work()

3、修饰符

 typescript 里面定义属性的时候给我们提供了三种修饰符

    public(公有):在类里面、子类、类外面都可以访问

    protected(保护类型): 在类里面、子类里面可以方法,在类外面无法访问

    private(私有):在类里面可以访问,子类与类外面无法访问

    属性不加修饰符,默认是公有

class Person {
    // public name: string // 公有属性
    // protected name: string // 保护类型
    private name: string // 私有类型
    constructor(name: string) {
        this.name = name
    }
    run(): string {
        return `${this.name}父类`
    }
}

class Web extends Person {
    constructor(name: string) {
        super(name) // 初始化父类的构造函数
    }
    // run(): string {
    //     return `${this.name}子类`
    // }
    work() {
        console.log(`${this.name}工作`);
    }
}
let w = new Web('11')
w.work()

// 类外部访问公有属性
let p = new Person('哈哈哈')
/*
    类外部访问公有属性:正常打印哈哈哈
    类外部无法访问保护类型、私有类型:可以打印出来哈哈哈,但是语法会报错,之所以可以打印出来是因为浏览器将其转化为es5代码执行
*/
console.log(p.run());
console.log(p.name); // 哈哈哈

 4、静态方法、属性

// 静态属性 静态方法
function Person() {
    this.run1 = function () {
        // 实例方法
        console.log('实例方法');
    }
}
Person.a = '静态属性'
Person.run2 = function () {
    // 静态方法
    console.log('静态方法');
}
let p = new Person()
Person.run2() // 静态方法的调用

 ts 静态

class Person {
    public name: string
    public age: number = 18
    static sex = 'x'// 静态属性
    constructor(name: string) {
        this.name = name
    }
    run() {
        console.log(`${this.name}run`);
    }
    work() {
        console.log(`${this.name}work`);
    }

    static print() {
        // 静态方法无法直接调用类里面的属性
        console.log('静态方法' + Person.sex);
    }
}
let p = new Person('Person')
p.run()
Person.print()
console.log(Person.sex);

5、多态

多态属于继承,父类定义一个方法不去实现,让继承它的子类去实现,每一个子类有不同的表现

class Animal {
    name: string
    constructor(name: string) {
        this.name = name
    }
    eat() {
        // 具体的操作不知道,由继承它的子类去实现,每一个子类的表现不一样
        console.log('吃');
    }
}
class Dog extends Animal {
    constructor(name: string) {
        super(name)
    }
    eat() {
        console.log(`${this.name}汪汪`);
    }
}
class Cat extends Animal {
    constructor(name: string) {
        super(name)
    }
    eat() {
        console.log(`${this.name}喵喵`);
    }
}
let a = new Cat('猫')
a.eat()

 6、抽象类

typescript 中的抽象类:它是提供其他类继承的基类,不能直接被实例化

用 abstract 关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现

abstract 抽象方法只能放在抽象类里面

抽象类和抽象方法用来定义标准,标砖:Animal 这个类要求它的子类必须包含 eat 方法

abstract class Animal {
    public name: string
    constructor(name: string) {
        this.name = name
    }
    abstract eat(): any
    run() {
        console.log('其他方法可以不实现');
    }
}
// var a = new Animal() 错误写法
class Dog extends Animal {
    // 抽象类的子类必须实现抽象类里面的抽象方法
    constructor(name: any) {
        super(name)
    }
    eat() {
        console.log(`${this.name}Dog`);
    }

}
var d = new Dog('小黄')
d.eat()

class Cat extends Animal {
    constructor(name: string) {
        super(name)
    }
    eat() {
        console.log(`${this.name}喵喵`);
    }
}
var c = new Cat('小猫')
c.eat()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

宏集Panorama SCADA软件获BACnet BTL认证

Panorama 获得BACnet BTL认证 建筑物的组件(空调系统、照明传感器等)能否使用共同通讯协议?这正是标准化 BACnet协议(Building Automation and Control Networks)所提供的功能。该协议旨在实现建筑物中各种设备和系统…

初探 JUC 并发编程:读写锁 ReentrantReadWriteLock 原理(8000 字源码详解)

本文中会涉及到一些前面 ReentrantLock 中学到的内容,先去阅读一下我关于独占锁 ReentrantLock 的源码解析阅读起来会更加清晰。 初探 JUC 并发编程:独占锁 ReentrantLock 底层源码解析 6.4)读写锁 ReentrantReadWriteLock 原理 前面提到的 R…

谈基于ATTCK框架的攻击链溯源

引言 网络安全在当今数字化时代变得尤为关键,而MITRE公司开发的ATT&CK框架则成为了安全专业人员的重要工具。ATT&CK是一种广泛使用的攻击行为分类和描述框架。其目的在于提供一个共同的语言,使安全专业人员能够更好地理解攻击者的行为和目标&…

整理好了!咸阳市各区县高新技术企业申报奖补标准,高企认定时间流程及申报条件

咸阳市及各区县高企申报奖励 咸阳市:对首次通过认定的高新技术企业给予20万元的奖励,通过复审的企业给予5万元奖励。政策依据:咸阳市人民政府办公室关于印发《咸阳市科技型企业三年倍增计划实施方案(2022—2024年)》的…

如何在您的WordPress网站上安装和设置W3 Total Cache

本周有一个客户,购买Hostease的虚拟主机,询问我们的在线客服,如何在您的WordPress网站上安装和设置W3 Total Cache?我们为用户提供相关教程,用户很快解决了遇到的问题。在此,我们分享这个操作教程&#xff…

【2022 深圳 ArchSummit 】大数据架构稳定性保障实践

文章目录 一、前言二、现状三、大数据架构的历史变迁(一)洪荒期&MR(二)远古期&MPP(四)近现代&Flink/Spark(五)现如今&实时数据湖架构 四、架构稳定的关键因素&#…

学习100个Unity Shader (17) --- 深度纹理

文章目录 效果shader部分C# 部分理解参考 效果 shader部分 Shader "Example/DepthTexture" {SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"sampler2D _CameraDepthTexture;struct a2v{float4 pos : POSITIO…

公司活动想找媒体报道宣传怎样联系媒体?

作为公司宣传负责人,我深知媒体报道对于企业活动宣传的重要性。然而,在过去,每当有重要活动需要媒体曝光时,我总会被繁琐的媒体联系工作所困扰。 那时,我需要一家家地查询媒体联系方式,发送邮件、打电话,甚至亲自前往媒体机构进行沟通。然而,这样的过程不仅费时费力,而且效率低…

Linux系统调用过程详解:应用程序调用驱动过程

Linux下应用程序调用驱动程序过程: (1)加载一个驱动模块(.ko),产生一个设备文件,有唯一对应的inode结构体 a、每个设备文件都有一个对应的’inode‘结构体,包含了设备的主次设备号,是设备的唯一…

ChatGLM3-6B部署与微调及微调后使用

记录ChatGLM3-6B部署及官方Lora微调示例详细步骤及如何使用微调后的模型进行推理 一、下载代码 使用git clone 命令下载源码 git clone https://github.com/THUDM/ChatGLM3.git 如图所示 二、下载模型 模型权重文件从魔塔进行下载,不需要翻墙。权重文件比较大&…

搭建知识库必备:12个开源 Wiki 软件工具盘点

在任何成功的公司中,部门间的知识共享是至关重要的。如果没有一个简单的信息交流方法,团队怎样才能有效合作呢?Wiki软件提供了一种创建、组织及在全公司范围内分享知识的直接方法。但是,哪一种Wiki软件是最佳的选择呢?…

【计算机毕业设计】springboot工资管理系统

人类现已迈入二十一世纪,科学技术日新月异,经济、资讯等各方面都有了非常大的进步,尤其是资讯与 网络技术的飞速发展,对政治、经济、军事、文化等各方面都有了极大的影响。 利用电脑网络的这些便利,发展一套工资管理系…

Unity 修复Sentinel key not found (h0007)错误

这个问题是第二次遇到了,上次稀里糊涂的解决了,也没当回事,这次又跑出来了,网上找的教程大部分都是出自一个人。 1.删除这个路径下的文件 C:\ProgramData\SafeNet Sentinel,注意ProgramData好像是隐藏文件 2.在Windows…

Mac安装激活--Typora,一个比记事本更加强大的纯文本软件

一、安装 1.首先到官网下载Mac版的Typora,下载地址:https://typoraio.cn/ (1)打开默认中文站 (2)往下滑,下载Mac版 2.下载完成后,会看到Typora.dmg文件,点击打开文件 3.打开Typ…

mac苹果电脑卡顿反应慢如何解决?2024最新免费方法教程

苹果电脑以其稳定的性能、出色的设计和高效的操作系统,赢得了广大用户的喜爱。然而,随着时间的推移,一些用户会发现自己的苹果电脑开始出现卡顿、反应慢等问题。这不仅影响使用体验,还会影响工作效率。那么,面对这些问…

luceda ipkiss教程 68:通过代码模板提高线路设计效率

在用ipkiss设计器件或者线路时,经常需要输入: from ipkiss3 import all as i3那么有什么办法可以快速输入这段代码呢?这里就可以利用Pycharm的 live template功能,只需要将文件:ipkiss.xml (luceda ipkiss教程 68&…

JetBrains的Java集成开发环境IntelliJ 2024.1版本在Windows/Linux系统的下载与安装配置

目录 前言一、IntelliJ在Windows安装二、IntelliJ在Linux安装三、Windows下使用配置四、Linux下使用配置总结 前言 ​ “ IntelliJ IDEA Ultimate是一款功能强大的Java集成开发环境(IDE)。它提供了丰富的功能和工具,可以帮助开发人员更高效地…

深入理解Java HashSet类及其实现原理

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

LabVIEW MEMS电容式压力传感器测试系统

LabVIEW MEMS电容式压力传感器测试系统 随着微电子技术的发展,MEMS(微电机系统)技术在各个领域得到了广泛应用。MEMS电容式压力传感器以其高灵敏度、小尺寸、低功耗等优点,在微传感器领域占据了重要的地位。然而,这些…

基于FPGA的音视频监视器,音视频接口采集器的应用

① 支持1路HDMI1路SDI 输入 ② 支持1路HDMI输出 ③ 支持1080P高清屏显示实时画面以 及叠加的分析结果 ④ 支持同时查看波形图(亮度/RGB)、 直方图、矢量图 ⑤ 支持峰值对焦、斑马纹、伪彩色、 单色、安全框遮幅标记 ⑥ 支持任意缩放画面,支…
最新文章