ts 多态

2022-05-23  本文已影响0人  暴躁程序员
  1. 定义:为不同数据类型的实体(子类实体)提供统一的接口(父类类型的引用)
  2. 示例:函数的形参只写父类引用(统一参数),且此函数接受父类实例对象和任意子类实例对象,以此来统一按需调用不同的类的相同方法
// 创建 父类
class Person {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
  say(): void {
    console.log(this.name);
  }
}

// 创建 子类一
class Student extends Person {
  age: number;
  constructor(age: number, name: string) {
    super(name);
    this.age = age;
  }
  say(): void {
    console.log(this.name + this.age);
  }
}
// 创建 子类二
class Teacher extends Person {
  grade: string;
  constructor(grade: string, name: string) {
    super(name);
    this.grade = grade;
  }
  say(): void {
    console.log(this.name + this.grade);
  }
}

// 常规:父类类型引用指向父类实例
let person: Person = new Person("人");

// 多态一:父类类型引用指向子类实例对象
let xiaoming: Person = new Student(18, "小明");

// 多态二:父类类型引用指向子类实例对象
let mrZhang: Person = new Teacher("高二", "张老师");

// 多态的作用:不同类型的对象(必须是父子关系)针对相同的方法,产生了不同的行为
function sayWhat(who: Person) {
  who.say(); // 执行共有的方法
}

sayWhat(person); // 传入 父类实例对象
sayWhat(xiaoming); // 传入 子类实例对象
sayWhat(mrZhang); // 传入 子类实例对象
上一篇 下一篇

猜你喜欢

热点阅读