TypeScript 类的继承
类的继承介绍
使用类的继承有什么好处?
继承是面向对象的一个重要的特性。
利用继承,子类不需要额外的代码,就可以拥有父类的特性和能力,并且可以在父类的基础上进行扩展,从而增强代码的可复用性。
接下来,让我们一起来学习 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()
的结果为 10
,p.setAge(20)
的结果为 20
。
转载自:https://juejin.cn/post/7031776161206108167