TypeScript 入门教程之类的静态属性、静态方法、修饰符、多态、抽象类

作者: tww844475003 分类: TypeScript 发布时间: 2021-09-26 21:13

类的定义

类(class)这个概念来源于OOP(Object Oriented Programming),也就是面向对象编程,OOP是一种计算机编程架构,其有着封装,继承,多态三种特性。而类在OOP中是实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。

静态属性、静态方法

static 关键字用于定义类的数据成员(属性和方法)为静态的,静态成员可以直接通过类名调用。

class Animal {
  static alias: string;

  static run(): void {
    console.log(`${Animal.alias} is run`)
  }

  constructor(alias: string) {
    Animal.alias = alias
  }
}

Animal.alias = 'Dog'; // 初始化静态变量
Animal.run(); // 调用静态方法

// 静态属性、静态方法不能实列化调用
const animal = new Animal('Cat')
animal.alias // 报错
animal.run() // 报错

修饰符

  • public:公有,不加修饰符默认公有。类里、子类、外部可以访问
  • protected:保护类型,类里、子类可以访问,类外不可访问
  • private:类里可以访问,子类、外部不可访问
class Person {
  public name: string; // 公有
  protected age: number; // 保护
  private phone: number; // 私有

  constructor(name: string, age: number, phone: number) {
    this.name = name;
    this.age = age;
    this.phone = phone;
  }
}

class ChildPerson extends Person {
  constructor(name: string, age: number, phone: number) {
    super(name, age, phone);
  }

  getName(): string {
    return this.name
  }

  getAge(): number {
    return this.age
  }

  getPhone(): number {
    return this.phone // 报错,私有属性,派生类不能访问私有属性
  }
}

const cp = new ChildPerson('张三', 20, 13666666666);
console.log(cp.name); // 张三
console.log(cp.age); // 报错,实例化不能访问访问保护属性
console.log(cp.phone); // 报错,实例化不能访问访问私有属性

const p = new Person('李四', 20, 13888888888)
console.log(p.name); // 李四
console.log(p.age); // 报错,实例化不能访问访问保护属性
console.log(p.phone); // 报错,实例化不能访问访问私有属性

多态

父类定义一个方法不去实现,让继承他的子类去实现,每一个子类有不同的表现

class Animal {
  public name: string;

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

  eat(): void {

  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name);
  }

  eat(): string {
    return `${this.name}吃肉!`;
  }
}

class Cat extends Animal {
  constructor(name: string) {
    super(name);
  }

  eat(): string {
    return `${this.name}吃鱼!`;
  }
}

const d1 = new Dog('大黄');
console.log(d1.eat()); // 大黄吃肉!
const c1 = new Cat('小白');
console.log(c1.eat()); // 小白吃鱼!

抽象类

它是提供其他类继承的基类,不能直接被实例化。

用 abstract 关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现。

abstract 抽象方法只能放在抽象类里面

抽象类和抽象方法用来定义标准, 继承他的子类实现抽象方法

abstract class Animal {
  abstract eat(): void;
}

class Dog extends Animal {
  eat(): void {
    console.log('吃肉!')
  }
}

class Cat extends Animal {
  eat(): void {
    console.log('吃鱼!')
  }
}

前端开发那点事
微信公众号搜索“前端开发那点事”

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注