返回

面向对象编程:TypeScript 中的 implements 和 extends 的妙用

前端

在 TypeScript 的浩瀚宇宙中,面向对象编程 (OOP) 闪耀着璀璨夺目的光芒,而 implements 和 extends 则是这片星空中两颗璀璨的明珠。借助这两颗指路明灯,我们可以构建出复杂且灵活的应用程序。

首先,让我们从类继承类的奥秘开始探索。类继承类,犹如子承父业,后代继承先辈的智慧与能力。TypeScript 允许子类继承父类的属性和方法,并可以扩展或修改这些属性和方法,从而实现代码的复用和扩展。

紧随其后,我们揭开接口继承接口/类的面纱。接口继承接口,犹如学生学习多门学科,每门学科都有其独特的知识体系和技能要求。接口继承类,犹如演员扮演不同的角色,每个角色都有其独特的性格和行为方式。TypeScript 允许接口继承其他接口或类,从而实现代码的模块化和复用。

最后,我们进入类实现接口/类的殿堂。类实现接口,犹如学生完成作业,必须满足老师提出的要求。类实现类,犹如工人制造产品,必须满足客户的特定需求。TypeScript 允许类实现接口或其他类,从而实现代码的兼容性和扩展性。

在 TypeScript 的世界中,implements 和 extends 的妙用无穷,它们使我们能够构建出更加灵活、健壮和可扩展的应用程序。让我们携手遨游 TypeScript 的海洋,尽情探索 OOP 的奥秘,谱写出更加辉煌的代码乐章。

现在,让我们具体看看如何在 TypeScript 中使用 implements 和 extends。

类继承类

class Parent {
  name: string;
  constructor(name: string) {
    this.name = name;
  }

  greet() {
    console.log(`Hello, my name is ${this.name}.`);
  }
}

class Child extends Parent {
  age: number;
  constructor(name: string, age: number) {
    super(name);
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const child = new Child("John", 25);
child.greet(); // Output: Hello, my name is John and I am 25 years old.

在这个例子中,Child 类继承了 Parent 类,并扩展了 Parent 类的方法 greet()。

接口继承接口/类

interface IAnimal {
  name: string;
  eat(): void;
}

interface IDog extends IAnimal {
  bark(): void;
}

class Dog implements IDog {
  name: string;
  constructor(name: string) {
    this.name = name;
  }

  eat() {
    console.log(`${this.name} is eating.`);
  }

  bark() {
    console.log(`${this.name} is barking.`);
  }
}

const dog = new Dog("Spot");
dog.eat(); // Output: Spot is eating.
dog.bark(); // Output: Spot is barking.

在这个例子中,IDog 接口继承了 IAnimal 接口,并添加了一个新的方法 bark()。Dog 类实现了 IDog 接口,并提供了 eat() 和 bark() 方法的具体实现。

类实现接口/类

interface IShape {
  area(): number;
}

class Circle implements IShape {
  radius: number;
  constructor(radius: number) {
    this.radius = radius;
  }

  area() {
    return Math.PI * this.radius ** 2;
  }
}

class Rectangle implements IShape {
  width: number;
  height: number;
  constructor(width: number, height: number) {
    this.width = width;
    this.height = height;
  }

  area() {
    return this.width * this.height;
  }
}

const circle = new Circle(5);
const rectangle = new Rectangle(10, 15);

console.log(`Area of circle: ${circle.area()}`); // Output: Area of circle: 78.53981633974483
console.log(`Area of rectangle: ${rectangle.area()}`); // Output: Area of rectangle: 150

在这个例子中,Circle 类和 Rectangle 类都实现了 IShape 接口,并提供了 area() 方法的具体实现。

总之,TypeScript 中的 implements 和 extends 是面向对象编程的利器,它们使我们能够构建出更加灵活、健壮和可扩展的应用程序。