TypeScript 中的方法覆盖
在本文中,我们将了解与方法覆盖相关的一些必要细节,进一步,我们将了解如何在 TypeScript 中实现方法覆盖。
方法覆盖:
- 方法覆盖是指属于基类(或父类)的方法被派生(子)类的相同方法(相同方法和签名)覆盖的过程。
- 在这个过程中,子(派生)类方法可能使用也可能不使用父(基)类方法中定义的逻辑。
- 为了调用基类的方法或属性,我们可以使用super关键字来帮助我们将基类的特定方法或属性调用到子类中。
- 每当我们想改变子类中父类的任何方法的行为时,方法覆盖很有用。
在分析了与 TypeScript 中的方法覆盖相关的所有基本事实之后,现在让我们看看如何通过下面的一些图解示例在 TypeScript 中实现方法覆盖。
示例 1:在此示例中,我们将声明两个类,并在父类中声明一个方法,该方法将被子类以其自己的逻辑覆盖。
Javascript
class Boy {
name : string
about() : void {
console.log(this.name +" is an intelligent boy..")
}
}
class Student extends Boy {
rollnumber : number;
marks: number;
constructor(rollnumber : number, marks : number,
name1 : string){
super();
this.rollnumber = rollnumber
this.name = name1
this.marks = marks
}
displayStudentInformation() : void {
console.log("Name : "+ this.name +", Roll Number : " +
this.rollnumber +",
Scores : " + this.marks + " out of 100" )
}
about() : void{
console.log(this.name + " scores well...")
}
}
let student = new Student(2, 96, "Rohit");
student.displayStudentInformation();
student.about();
Javascript
class Boy {
name : string
about() : void {
console.log(this.name +" is an intelligent boy..")
}
}
class Student extends Boy {
rollnumber : number;
marks: number;
constructor(rollnumber : number, marks : number,
name1 : string){
super();
this.rollnumber = rollnumber
this.name = name1
this.marks = marks
}
displayStudentInformation() : void {
console.log("Name : "+ this.name +", Roll Number : " +
this.rollnumber +",
Scores : " + this.marks + " out of 100" )
}
about() : void {
// Invokes parent class about() method here also.
super.about();
console.log(this.name + " scores well...")
}
}
let student = new Student(2, 96, "Rohit");
student.displayStudentInformation();
student.about();
输出:
Name : Rohit, Roll Number : 2, Scores : 96 out of 100
Rohit scores well...
示例 2:在此示例中,我们将使用super关键字在子类覆盖的父类方法中显示父类方法的结果。
Javascript
class Boy {
name : string
about() : void {
console.log(this.name +" is an intelligent boy..")
}
}
class Student extends Boy {
rollnumber : number;
marks: number;
constructor(rollnumber : number, marks : number,
name1 : string){
super();
this.rollnumber = rollnumber
this.name = name1
this.marks = marks
}
displayStudentInformation() : void {
console.log("Name : "+ this.name +", Roll Number : " +
this.rollnumber +",
Scores : " + this.marks + " out of 100" )
}
about() : void {
// Invokes parent class about() method here also.
super.about();
console.log(this.name + " scores well...")
}
}
let student = new Student(2, 96, "Rohit");
student.displayStudentInformation();
student.about();
输出:
Name : Rohit, Roll Number : 2, Scores : 96 out of 100
Rohit is an intelligent boy..
Rohit scores well...
参考: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-3.html#override-and-the—noimplicitoverride-flag