13. TypeScript 类的只读属性和抽象类
这节主要讲一下类里的一个概念就是抽象类,抽象类和父类很像,都需要继承,但是抽象类里一般都有抽象方法。继承抽象类的类必须实现抽象方法才可以。在讲抽象类之前,我想把上节我遗忘的一个知识点给大家补上,那就是类里的只读属性readonly
。
类里的只读属性 readonly
新建一个文件Demo13.ts
,然后写下面一个类,并进行实例化和赋值操作,代码如下:
class Person { constructor(public name:string ){ } } const person = new Person('mybj') console.log(person.name)
写完后我们可以在终端(Terminal)中看一下结果,结果就应该是mybj
。
比如我现在有一个需求,就是在实例化对象时赋予的名字,以后不能再更改了,也就是我们常说的只读属性。我们先来看现在这种情况是可以随意更改的,比如我写下面的代码。
class Person { constructor(public name:string ){ } } const person = new Person('mybj') person.name= '码云笔记' console.log(person.name)
这时候就可以用一个关键词readonly
,也就是只读的意思,来修改Person
类代码。
class Person { public readonly _name :string; constructor(name:string ){ this._name = name; } } const person = new Person('mybj') person._name= '码云笔记' console.log(person._name)
这样写完后,VSCode
就回直接给我们报错,告诉我们_name
属性是只读属性,不能修改。这是上节遗忘的一个知识点,我在这里给大家补上了。
抽象类的使用
什么是抽象类呢?我给大家举个例子,比如我们到洗浴中心,里边有服务员,有初级技师,高级技师,每一个岗位我都写成一个类,那代码就是这样的。(注释掉刚才写的代码)
class Waiter {} class BaseTeacher {} class seniorTeacher {}
作为老板,要求无论是什么职位,都要有独特的技能,比如服务员就是给顾客倒水,初级技师要求会泰式按摩,高级技师要求会 SPA 全身按摩。这是一个硬性要求,但是每个职位的技能有不同,这时候就可以用抽象类来解决问题。
抽象类的关键词是abstract
,里边的抽象方法也是abstract
开头的,现在我们就写一个Girl
的抽象类。
abstract class Girl{ abstract skill() //因为没有具体的方法,所以我们这里不写括号 }
有了这个抽象类,三个类就可以继承这个类,然后会要求必须实现skill()
方法,代码如下:
abstract class Girl{ abstract skill() //因为没有具体的方法,所以我们这里不写括号 } class Waiter extends Girl{ skill(){ console.log('先生,请喝水!') } } class BaseTeacher extends Girl{ skill(){ console.log('先生,来个泰式按摩吧!') } } class seniorTeacher extends Girl{ skill(){ console.log('先生,来个 SPA 全身按摩吧!') } }
以上就是本节全部内容,我希望通过这个例子,让你能够对抽象类和抽象方法有一个比较深的认识。其实在工作中我们也会把这样的需求用接口来实现。
码云笔记 » 13. TypeScript 类的只读属性和抽象类