📜  TypeScript 中的方法覆盖

📅  最后修改于: 2022-05-13 01:56:12.229000             🧑  作者: Mango

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