TypeScript(类—继承—多态)

一、类的定义(class)

  类(class)这个概念来源于OOP(Object Oriented Programming),也就是面向对象编程,OOP是一种计算机编程架构,其有着封装,继承,多态三种特性。而类在OOP中是实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。

  es5:

        function Person(name) {
            this.name = name;
            this.run = function () {
                console.log(this.name)
            }
        }
        let p = new Person('李四')
        p.run()  // 李四

  ts:

class Person{       
    name:string;    /* 属性,前面省略public关键词   */
    constructor(name:string){   /* 构造函数,实例化类的时候触发的方法 */
        this.name=name
    }
    get():void{
        console.log(this.name)
    }
    set(name:string):void{
        this.name=name
        console.log(this.name)
    }
}
let p=new Person('李四')
p.get()     /* 李四 */
p.set('张三')     /* 张三 */
p.get()     /* 张三 */

二、继承(extends、super)

class Futher {
    name: string;
    constructor(name: string) {
        this.name = name
    }
    run(): void {
        console.log(this.name)
    }
}
let p1 = new Futher('张三')
p1.run() // 张三
class Child extends Futher {
    constructor(name: string) {
        super(name) /* 初始化父类的函数 */
    }
    work(): void {
        console.log(this.name)
    }
}
let p2 = new Child('李四')
p2.run() // 李四,子类继承父类的方法,若子类存在该方法则优先使用子类的方法
p2.work()   // 李四,子类可以拓展自己的方法

三、类里的修饰符(public、protected、private)

  public:公有,不加修饰符默认公有。类里、子类、外部可以访问

  protected:保护类型,类里、子类可以访问,类外不可访问

  private:类里可以访问,子类、外部不可访问

class Futher {
    public name: string;    /* 公有 */
    protected age: number | null | undefined;    /* 保护 */
    private phone: number | null | undefined;    /* 私有 */
    constructor(name: string, age?: number, phone?: number) {
        this.name = name
        this.age = age
        this.phone = phone
    }
    run(): void {
        console.log(this.name, this.age, this.phone)
    }
}
class Child extends Futher {
    constructor(name: string, age: number, phone?: number) {
        super(name, age, phone) /* 初始化父类的函数 */
    }
    work(): void {
        console.log(this.name, this.age)
        /* console.log(this.name,this.age,this.phone) */  /* 子类添加private报错 */
    }
}
let p1 = new Futher('李四', 18, 123456)
let p2 = new Child('张三', 20, 654321)
p1.run() /* 李四 18 123456,类里可以访问public\protected\private */
p2.work()/*  张三 20,子类可以访问public\protected,子类访问private报错 */
console.log(p1.name) /*  张三,李四,外部可以访问public */
/* console.log(p1.name,p1.age,p1.age)*/ /* error,外部访问protected\private报错 */

四、静态方法(static)

class Person {
    public name: string;    /* 公有 */
    static sex:string='男'; /* 静态属性 */
    constructor(name: string) {
        this.name = name
    }
    run(): void {   /* 实例方法,实例后调用 */
        console.log(this.name)
    }
    static work():void{ /* 静态方法,不能直接调用类里的属性 */
        /* console.log(this.name) */  /* error,不能直接调用类里的属性 */
        console.log(Person.sex) /* 男 */
    }
}

五、多态

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

  多态属于继承

class Futher {
    public age: number;
    constructor(age: number) {
        this.age = age
    }
    counts(): void {
        console.log(this.age)
    }
}
class children1 extends Futher {
    constructor(age: number) {
        super(age)
    }
    counts(): void {    /* 多态,重写方法不执行父类方法 */
        console.log(this.age - 1)
    }
}
class children2 extends Futher {
    constructor(age: number) {
        super(age)
    }
    counts(): void {
        console.log(this.age + 1)
    }
}

六、抽象类(abstract)

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

  1、抽象方法必须在抽象类中

  2、抽象类和抽象方法是一个标准,定义标准后,子类中必须包含抽象定义的方法

abstract class Futher { /* 定义一个抽象方法 */
    public age: number;
    constructor(age: number) {
        this.age = age
    }
    abstract counts(): any; /* 抽象方法必须在抽象类中 */
}
class children extends Futher {
    constructor(age: number) {
        super(age)
    }
    counts(): void {    /* 子类中必须有抽象类中的抽象方法 */
        console.log(this.age - 1)
    }
}

TypeScript的使用场景包括但不限于以下几种情况: 1. 封装和组织代码:可以帮助开发者将相关的属性和方法组织在一起,实现代码的模块化和封装。通过定义,可以更好地管理和维护代码。 2. 创建对象:通过,可以创建多个对象,并且每个对象都具有相同的属性和方法。这样可以节省代码量,并且方便对对象进行统一的操作和管理。 3. 继承多态:通过继承,可以创建一个基,并从基派生出子。子可以继承的属性和方法,并且可以进行修改和扩展。这样可以实现代码的复用和扩展性。 4. 型的定义和校验:TypeScript是静态型语言,通过定义,可以明确指定属性和方法的型,并且在编译时进行型校验,防止潜在的型错误。 5. 的实例化和初始化:通过的构造函数,可以在创建对象时对对象进行初始化操作,为对象的属性赋初值,确保对象的初始状态符合预期。 总结来说,TypeScript的使用场景主要包括封装和组织代码、创建对象、继承多态型的定义和校验以及的实例化和初始化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [TypeScript深度剖析:TypeScript的理解?应用场景?](https://blog.csdn.net/weixin_40808668/article/details/129420594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [【typescriptTypescript联合型断言 、Typescript 泛型函数以及使用场景](https://blog.csdn.net/m0_64494670/article/details/129271005)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值