TypeScript 类的继承

这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

类的继承介绍

使用类的继承有什么好处?

继承是面向对象的一个重要的特性。

利用继承,子类不需要额外的代码,就可以拥有父类的特性和能力,并且可以在父类的基础上进行扩展,从而增强代码的可复用性。

接下来,让我们一起来学习 TS 中的继承吧。

类的继承

继承是面向对象中非常重要的概念。一个子类继承父类,那么它就拥有了父类的属性和方法。

这种继承的机制,可以增强代码的可复用性,将子类公用的属性和方法抽象出来,同时对某些表现不一致的子类,可以通过复写的方式,在子类中将父类的属性或方法覆盖掉,在这个例子中,我们定义了:

// 父类
class Animal {
    name: string;
    sayHi() {
        console.log('Hi');
    }
}

// 子类
class Cat extends Animal {
    sayHi() {
        console.log(`Meow, my name is ${this.name}`);
    }
    catchMouse() {
        console.log('抓到了一只老鼠');
    }
}
复制代码

在这个例子中,我们定义了父类 Animal,它有 name 属性和 sayHi 方法,然后我们定义一个子类 Cat,它继承自父类,这样 Cat 上就也有 name 属性和 sayHi 方法,接着我们在 Cat 上又定义了 sayHi 方法,这样的话,这个方法就会覆盖掉父类的 sayHi 方法,除此之外,这个 Cat 还有一些独有的方法:catchMouse 方法。

习题:下面表达式的结果为?

class Animal {
    protected age = 10;
    public getAge() {
        return this.age;
    }
}

class Panda extends Animal {
    setAge(age: number) {
        return this.age = age;
    }
}
const p = new Panda();
p.getAge(); // 结果?
p.setAge(20); // 结果?
复制代码

答案:10、20

解析:

一个类(A)可以使用 extends 继承另一个类(B),我们叫类 A 为子类,类 B 为父类。

子类会拥有父类的所有属性和方法,子类中相同的属性或方法会覆盖父类。如果子类中存在构造函数,那么子类的构造函数需含有父类的 super 调用,即调用父类的构造函数。

子类 Panda 继承于父类 Animal,因此在子类 Panda 的实例对象 p 中会存在属性 age 和方法 getAge。因此 p.getAge() 的结果为 10p.setAge(20) 的结果为 20

おすすめ

転載: juejin.im/post/7031776161206108167