在TypeScript中,从子类调用基类的构造函数是通过super关键字实现的。当你在子类中定义一个构造函数时,你必须首先调用super(),这会执行基类的构造函数。在调用super()之后,你可以在子类构造函数中执行其他初始化操作。
这是面向对象编程中的一个常见模式,用于确保继承的类正确地初始化了其基类部分。
示例
假设我们有一个基类Person,它有一个构造函数,该构造函数接受name作为参数:
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
}
现在,我们创建一个Employee类,它继承自Person。我们希望Employee类接受一个额外的参数employeeID,但同时也需要从Person类继承name属性。这就是我们如何做到的:
class Employee extends Person {
employeeID: number;
constructor(name: string, employeeID: number) {
super(name); // 调用基类(Person)的构造函数
this.employeeID = employeeID;
}
}
在这个例子中,Employee类的构造函数首先通过super(name)调用了Person类的构造函数,传递了name参数。这确保了Employee实例的name属性被正确初始化。之后,Employee类的构造函数继续设置employeeID属性。
注意事项
- 当你在子类中定义构造函数时,调用
super()是必需的,即使基类没有定义构造函数。如果基类没有显式定义构造函数,它会有一个默认的空构造函数,你仍然需要在子类构造函数中调用super()。 super()调用必须是子类构造函数中的第一条语句。这是因为在基类的构造函数执行完成之前,子类的实例尚未被初始化,所以你不能在调用super()之前访问this。
通过这种方式,TypeScript(和ES6的类)支持基于类的面向对象编程中的继承和构造函数调用,允许开发者构建复杂的类层次结构。
5627

被折叠的 条评论
为什么被折叠?



