@Class
更多信息,请访问 TypeScript
Overview
结构和接口差不多,是属性和方法的集合体
构造函数:特殊的方法
syntax
class ClassName {
  // 属性
  propertyName: propertyType;

  // 构造函数 - 可以指定默认值
  constructor(param1: paramType, param2: paramType) {
    // 初始化代码
  }

  // 方法
  methodName(): returnType {
    // 方法体
  }
}
demo
class Teacher {
  age: number;
  gender: string;
  constructor(age: number = 24, gender: string = "male") {
    this.age = age;
    this.gender = gender;
  }
  sayHi() {
    console.log("hi,there.");
  }
}
implements
类和接口的关系可以用实现描述
类可以实现 implements 接口 - 接口是抽象的;类是具体的
类可以实现一个或多个接口
syntax
interface InterfaceName {
  propertyName: propertyType;
  methodName(): returnType;
}

class ClassName implements InterfaceName {
  propertyName: propertyType;

  methodName(): returnType {
    // 方法的具体实现
  }
}
demo
class Teacher implements Person{}
class Teacher implements Person, Teenager{}
extends
类和类的关系可以用继承描述
可以继承一个或多个类
子类可以重写父类的方法,以提供特定的实现
子类可以添加新的属性和方法
子类可以使用 super 关键字来访问父类的构造函数和方法
syntax
class ParentClass {
  // 父类的属性和方法
}

class ChildClass extends ParentClass {
  // 子类的属性和方法
}
demo

    
Polymorphism
允许对象以多种形式存在
通过继承和接口来实现
多态使得代码更加灵活和可扩展 - 允许不同的类以统一的方式进行处理
.方法重写 Method Overriding
.接口实现 Interface Implementation
.基类/父类引用指向子类对象
modifier
描述类成员变量、方法和构造函数的可访问性
public
默认的访问修饰符,表示该成员变量、方法或构造函数是公共的,可以在任何地方访问
private
表示该成员变量、方法或构造函数是私有的,只能在类的内部访问
子类也无法访问
protected
表示该成员变量、方法或构造函数只能在类及其子类中访问
static
静态成员 - 无须实例化即可访问 / 通过类名直接访问
适合用于工具类或实用函数
构造函数无法使用 static 修饰
每个类默认有一个 name 属性,注意规避
Abstract
抽象类
通常用于定义其他类的基类
使用 abstract 定义
抽象类可以包含抽象方法(没有实现的方法)和具体方法(有实现的方法);抽象方法必须在派生类中实现
abstract class Animal {
  // 抽象属性
  abstract name: string;

  // 抽象方法
  abstract makeSound(): void;

  // 具体方法
  move(): void {
    console.log("Moving along...");
  }
}

// 尝试实例化抽象类会报错
// const animal = new Animal(); // Error: Cannot create an instance of an abstract class.
派生类实现抽象类
class Dog extends Animal {
  name: string;

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

  makeSound(): void {
    console.log("Woof! Woof!");
  }
}

const dog = new Dog("Buddy");
dog.makeSound(); // 输出: Woof! Woof!
dog.move(); // 输出: Moving along...