TS复习-----TS中的类

2023-11-20

目录

概述

类的定义

类的继承

类的静态方法和属性

类里面的修饰符

抽象类

 多态

getters与setters

readonly修饰符


概述

  • 类(Class):定义了一切事物的抽象特点
  • 对象(Object):类的实例
  • 面向对象(OOP)三大特性:封装继承多态

类的定义

// 定义类
class Person {
    // 公共属性,默认可以不写
    public name: string
    // 构造函数
    constructor(name: string) {
        // 初始化name属性
        this.name = name
    }
}
// 实例化类
const person = new Person('zs')
console.log(person.name) // zs

类的继承

在面向对象的编程语言中,有一个重要得特征就是继承。继承就是基于某个类来扩展现有的类。

例如,爸爸在北京有一个四合院,儿子可以继承爸爸的四合院,而且还可以自己去买一栋别墅;最终儿子的房产拥有北京的四合院和一栋别墅。

TypeScript中类的继承需要通过extends来配合super来实现。子类若要继承父类的属性和方法需要执行一次super(),它代表实例化父类的构造函数,super() 只能用在子类的构造函数之中,用在其他地方就会报错。

// 定义一个基类,又称超类
class Father {
    // 在基类中定义一个name属性
    public name: string
    constructor(name: string) {
        this.name = name
    }
}
// 定义一个派生类,又称子类,继承于基类 
class Son extends Father {
    constructor(name: string, public age: number) {
        // 通过 super 调用基类的构造函数
        super(name)
    }
    getInfo(): void {
        console.log(this.name); //ZS
        console.log(this.age); //18
    }

}
const a = new Son('ZS', 18)
a.getInfo()

类的静态方法和属性

静态属性和静态方法属于类自身,而不属于实例,访问的时候要用类名访问,而不能用实例对象访问。在 TS中定义静态成员与ES6中一样,都是使用static关键字来说明。

class Hero {
    static count = 0
    constructor(public name: string) {
        // 每创建一个属性 count ++
        ++Hero.count
    }
}
const hero1 = new Hero('孙悟空')
console.log(Hero.count) // 1
const hero2 = new Hero('哪吒')
console.log(Hero.count) // 2
// console.log(hero1.count);不能访问静态成员count

类里面的修饰符

TypeScript定义属性的时候给我们提供了三种修饰符:

  • public:公有属性,在当前类里面、 子类 、类外面都可以访问。属性如果不加修饰符默认就public
  • protected:保护类型,在当前类里面、子类里面可以访问 ,在类外部没法访问。
  • private:私有属性,在当前类里面可以访问,子类、类外部都没法访问。
class Person {
    public name: string
    // 约定 私有成员一般采用 _ 开头
    private _age: number
    protected hobby: string
    // 属性初始化
    constructor(name: string, age: number, hobby: string) {
        this.name = name
        this._age = age
        this.hobby = hobby
    }
    sayMy() {
        console.log(this.name, this._age, this.hobby)
    }
}

// 实例化 Person 类
const person = new Person('zs', 18, 'coding')
console.log(person.name) // zs
// console.log(person._age) // 报错 类外访问私有成员 抛出异常
//  console.log(person.hobby) // 报错  类外访问保护成员 抛出异常
person.sayMy() // zs 18 coding,private 成员和 protected 成员可以在类内访问

// 定义一个类继承与 Person 类
class Programmer extends Person {
    constructor(name: string, age: number, hobby: string) {
        super(name, age, hobby)
    }
    sayMy() {
        console.log(this.name) // zs
        // console.log(this._age) // 报错 在子类不可以访问父类的私有成员
        // console.log(this.hobby) // coding 在子类不可以访问父类的私有成员
    }
}

// 实例化 Programmer 类
const programmer = new Programmer('zs', 18, 'coding')
programmer.sayMy()


抽象类

概念

  • 想要理解什么是抽象类,就需要先理解什么是抽象,所谓的抽象就是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征 。例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。
  • 抽象类就是将众多类中具有共同部分的功能抽离出来,单独创建一个类作为其他派生类的基类使用。他们不允许被实例化,定义抽象类使用abstract关键字。
  • 抽象方法就是只有方法的定义,没有方法体,方法体需要在子类中进行实现。
// 通过 abstract 关键字 定义一个抽象类,该类不必进行初始化,仅作为基类使用
abstract class Department {
    // 初始化name成员,参数属性
    constructor(public name: string) { }

    printName(): void {
        console.log('部门名称: ' + this.name)
    }
    // 抽象方法必须包含 abstract 关键字
    abstract printMeeting(): void // 必须在派生类中实现
}

class AccountingDepartment extends Department {
    constructor() {
        super('会计部') // 在派生类的构造函数中必须调用super()
    }

    printMeeting(): void {
        console.log('会计部是负责管钱的部门')
    }
}

// const department = new Department() // 抛出异常:不能创建一个抽象类的实例
// 实例化抽象子类
const department = new AccountingDepartment()
// 调用抽象类中的方法
department.printName() // 部门名称: 会计部
// 调用在派生类实现的抽象方法
department.printMeeting() // 会计部是负责管钱的部门

 多态

多态属于继承,是继承的一种延续,在父类内部有一个公用方法,但是不知道具体做什么,由多个子类继承同一个方法,实现不同效果,这个公用方法也叫方法的重写


class Animall {
    name: string;
    constructor(name: string) {
        this.name = name
    }
    eat(): void {
        console.log('我们都可以吃');
    }
}

class Dog extends Animall {
    constructor(name: string) {
        super(name)
    }
    eat(): void {
        console.log(`${this.name}吃骨头`)
    }
}

class Cat extends Animall {
    constructor(name: string) {
        super(name)
    }
    eat(): void {
        console.log(`${this.name}吃老鼠`)
    }
}

let dog = new Dog('小黄')
dog.eat()

getters与setters

类中的私有成员和保护成员我们并不是真的不能读写,在TS中提供了getterssetters帮助我们有效的控制对对象成员的访问。

// 定义一个 Person 类
class Person {
    // 约定 私有成员一般采用 _ 开头
    private _name: string
    // 属性初始化
    constructor(name: string) {
        this._name = name
    }
    // 获取 私有的 _name 属性值
    get getName(): string {
        return this._name
    }
    // 设置 私有的 _name 属性值
    set setName(name: string) {
        this._name = name
    }
}
// 实例化类
const person = new Person('zs')
console.log(person.getName) // zs 通过 getName 的方式获取
person.setName = 'ls'//通过 setName 的方式设置 _name 的值
console.log(person.getName) // // 重新获取 ls

readonly修饰符

我们可以通过 readonly修饰符将一个属性设置为只读的。只读属性必须在声明时或者在构造函数中进行初始化。

// 定义一个类,且具有一个只读属性
class Person {
    // readonly name: string
    // 等同于
    // public readonly name: string
    // constructor(name: string) {
    //     this.name = name
    // }
    // 或者
    constructor(public readonly name: string) { }
}
// 实例化
const person = new Person('zs')
console.log(person.name) // zs
// 修改name的值
// person.name = 'ls' // 错误! name 是只读的.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TS复习-----TS中的类 的相关文章

随机推荐

  • vue3使用import.meta.env在vite.config.ts下使用env环境变量的方法

    vue3使用import meta env在vite config ts下使用env环境变量的方法 编程一枚的博客 CSDN博客
  • 一个关于jvm堆溢出引发的思考

    在本地测试无误的程序 放上正式服时 出现了堆溢出 本地是Windows系统下的 服务器是linux系统 后来经过测试发现是我在本地跑程序时 在eclipse中添加了如下参数 此处先解释下上面各参数的的含义 Xms512m 堆的最小值 Xmx
  • mysql视图

    一 什么是视图 视图是指计算机数据库中的视图 是一个虚拟表 其内容由查询定义 同真实的表一样 视图包含一系列带有名称的列和行数据 但是 视图并不在数据库中以存储的数据值集形式存在 行和列数据来自由定义视图的查询所引用的表 并且在引用视图时动
  • Java使用反射实现IOC容器

    前面写过怎么通过Java的反射技术实现对象的创建和管理 达到IOC的效果 但是没有讲设计的思路 直接上代码 导致很多人没有思路 因此今天具体的讲IOC的编写思路理清 这里单纯的通过Java中的反射创建对象 至于扩展的部分会有提示思路 既然提
  • 【深度解析→博文总结】李宏毅机器学习2023作业05Transformer(Machine Translation)

    文章目录 系列文章 简要说明 视频分享 作业详情 调参记录 Simple Baseline 15 05 Medium Baseline 18 44 Strong Baseline 23 57 Boss Baseline 30 08 资源链接
  • CVE-2019-11043(PHP远程代码执行漏洞)

    一 漏洞描述 CVE 2019 11043 是一个远程代码执行漏洞 使用某些特定配置的 Nginx PHP FPM 的服务器存在漏洞 可允许攻击者远程执行代码 向Nginx PHP FPM的服务器 URL发送 0a 时 服务器返回异常 该漏
  • windows配置检查

    文章目录 2 1 账号口令 2 1 1 检查是否已正确配置密码最长使用期限 2 1 2 检查是否已正确配置密码长度最小值 2 1 3 检查是否已正确配置 强制密码历史 2 1 4 检查是否已正确配置帐户锁定时间 2 1 5 检查是否已正确配
  • 操作系统简史(1)东方会有新的操作系统诞生吗?让历史告诉未来

    打造一个新的操作系统很难 打造一个新的操作系统不难 难的是建立一个以之为核心的生态系统 估计大家都被这两个问题给困惑过 第一个问题的答案是 有难度 但也不像许多人想象的那样难 如果不是这样 那么我们今天就不会用到Windows 不会用到Li
  • 机器学习笔记1—泰勒展开式和牛顿法

    写在前面 自学机器学习的菜鸟一枚 希望通过记录博客的形式来记录自己一点点的进步 下面都是学习过程中自己的一些思考和学习 希望大神们批评指正 1 1 泰勒展开式 1 1 1泰勒展开式入门 首先 百度了一波 搜到了一个泰勒展开式入门的短短6分钟
  • Linux命令行基本用法总结【自用】

    1 awk 这条语句只能说非常牛逼 我还在傻傻的写程序处理字符文件时 被awk劝退 深度好文 http www zsythink net archives 1336 主要的用法就是 awk F分隔符默认为空格 BEGIN 代码 代码 END
  • apollo配置中心启动失败,坑的一批

    1 按照官方文档一步一步来的 启动失败 2 看启动日志发现是数据库连接的问题 3 可是我防火墙都关了 数据库设置的还是所有机器可连接 而且还是本机数据库 以为是数据库的原因 试了好多方法 甚至用了阿里云服务器中的数据库尝试 还是连接失败 有
  • python爬虫二十三:使用fiddler抓取app数据(三)

    1 什么是fiddler Fiddler是 个http协议调试代理 具 它能够记录并检查所有电脑和互联网之间的http https stp等通讯 它 持IE Chrome FireFox等等浏览器 可以在phone pad等移动设备进 连接
  • 13.前端jQuery之【入门要点】【选择器】【筛选器】

    目录 1 jQuery基本要点 2 jQuery选择器 3 jQuery筛选器 1 jQuery基本要点 1 jQuery 引入方式 write less do more 官网https jquery com 1 方式一 下载jQuery压
  • html align 属性,align-content

    align content属性 含义 设置自由盒内部各个项目在垂直方向排列方式 使用条件 必须对父元素设置自由盒属性display flex 并且设置为横向排列以及换行flex flow row wrap 这样这个属性的设置才会起作用 注意
  • 域名解析ip地址的过程

    浏览器会把输入的域名解析成对应的IP 其过程如下 1 查找浏览器缓存 因为浏览器一般会缓存DNS记录一段时间 不同浏览器的时间可能不一样 一般2 30分钟不等 浏览器去查找这些缓存 如果有缓存 直接返回IP 否则下一步 2 查找系统缓存 浏
  • C++之switch case语句详解

    我们已经了解 if else 可以用来描述一个 二岔路口 我们只能选择其中一条路来继续走 然而 有时候我们会遇到一些 多岔路口 的情况 用if else 语句来描述这种多岔路口会显得非常麻烦 而且容易把思路搅浑 比如程序4 2 2就是一个用
  • [计算机毕业设计]深度相机稀疏点云分类

    前言 大四是整个大学期间最忙碌的时光 一边要忙着准备考研 考公 考教资或者实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度的 对本科同学来说是充满挑战 为帮助大
  • ios系统脚本服务器加速,让iOS系统加速飞起来 speed intensifier插件让iOS系统加速

    由于系统的限制 在动画以及程序打开时间和速度方面基本上在iOS设备当中都是固定的 虽然默认的速度并不算太慢 基本上符合大多数用户的使用习惯 但是还是有一部分用户想方设法的想要让程序打开的速度变快一些 这里小编就带给大家一款名为 speed
  • 筛选sql中一列的重复数据及重复次数

    SELECT PROJECT CODE COUNT PROJECT CODE FROM meng project info GROUP BY PROJECT CODE HAVING COUNT PROJECT CODE gt 1 结果
  • TS复习-----TS中的类

    目录 概述 类的定义 类的继承 类的静态方法和属性 类里面的修饰符 抽象类 多态 getters与setters readonly修饰符 概述 类 Class 定义了一切事物的抽象特点 对象 Object 类的实例 面向对象 OOP 三大特