MST

星途 面试题库

面试题:TypeScript继承中的super关键字的细节

在TypeScript类继承体系中,super关键字用于调用父类的构造函数和方法。请详细阐述super在构造函数和普通方法中的使用规则与注意事项,并说明在子类中重写父类方法时,super调用的时机与作用,结合具体代码示例分析。
31.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

在构造函数中使用 super

  1. 使用规则
    • 在子类构造函数中,如果要访问 this,必须先调用 super()。这是因为在子类构造函数中,this 的初始化依赖于父类构造函数的执行。
    • super() 必须在子类构造函数的第一行调用。
  2. 示例代码
class Animal {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
}

class Dog extends Animal {
    breed: string;
    constructor(name: string, breed: string) {
        super(name);
        this.breed = breed;
    }
}
  1. 注意事项
    • 如果子类没有显式定义构造函数,TypeScript 会自动生成一个默认构造函数,该构造函数会调用 super()
    • 如果子类构造函数显式定义了构造函数,必须调用 super(),除非该子类是抽象类。

在普通方法中使用 super

  1. 使用规则
    • super 用于调用父类的普通方法。通过 super,可以访问父类中定义的方法。
  2. 示例代码
class Animal {
    move(distanceInMeters: number = 0) {
        console.log(`Animal moved ${distanceInMeters}m.`);
    }
}

class Dog extends Animal {
    move(distanceInMeters: number = 5) {
        super.move(distanceInMeters);
        console.log(`Dog moved ${distanceInMeters}m.`);
    }
}
  1. 注意事项
    • super 只能在类的方法内部使用,不能在类的外部或函数中使用。
    • 在使用 super 调用父类方法时,要注意父类方法的参数和返回值类型,确保调用的正确性。

子类重写父类方法时 super 调用的时机与作用

  1. 调用时机
    • 通常在子类重写的方法中,可以在任何位置调用 super 来调用父类的同名方法。常见的是在子类方法逻辑开始时或结束时调用。
  2. 作用
    • 在子类重写方法中调用 super,可以复用父类方法的部分逻辑,同时在其基础上添加子类特有的逻辑。例如,在上述 Dog 类的 move 方法中,先调用 super.move(distanceInMeters) 执行父类 Animalmove 方法逻辑,然后再添加 Dog 类特有的输出逻辑。这样既保留了父类的核心行为,又实现了子类的扩展。