08_TypeScript 中的类(静态属性、静态方法、抽象类、继承多态)

静态属性、静态方法、抽象类、继承多态

  • 一、静态属性和静态方法
  • 二、多态
  • [三、 抽象方法、抽象类](#三、 抽象方法、抽象类)
    • [1、TypeScript 中的抽象类:它是提供其它类继承的基类,不能直接被实例化](#1、TypeScript 中的抽象类:它是提供其它类继承的基类,不能直接被实例化)
    • [2、用 abstract 关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现](#2、用 abstract 关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现)
    • [3、abstract 抽象方法只能放在抽象类里面](#3、abstract 抽象方法只能放在抽象类里面)
    • [4、抽象类和抽象方法用来定义标准。标准:Animal 这个类要求它的子类必须要包含 eat 方法](#4、抽象类和抽象方法用来定义标准。标准:Animal 这个类要求它的子类必须要包含 eat 方法)

一、静态属性和静态方法

1、回顾ES5中的静态方法

javascript 复制代码
function Person(){
  this.run2 = function () {} //实例方法
}
Person.run = function (){}// 静态方法
Person.name = 'nihao' //静态属性

// 静态方法可以直接调用,实例方法需要实例才能使用
Person.run() // 静态方法调用
let p = new Person()
p.run2() //实例方法调用

2、TS 中定义静态方法和静态属性

javascript 复制代码
class Person{
  public name:string
  static sex:string
  constructor(name:string) {
    this.name = name
  }
  run(){
    // 实例方法
    console.log(this.name + "is running")
  }
  work(){
    console.log(this.name + "is working")
  }
  static print(){
    //静态方法,里面没法直接调用类中的属性,只能调用static 修饰的静态属性
    console.log("print", Person.sex)
  }
}
Person.print()//调用静态方法,不需要实例化
let p = new Person('123')
p.run()//调用实例方法,需要实例化

二、多态

1、定义:父类定义一个方法不去实现,让继承它的子类去实现,每一个子类有不同的表现。多态属于继承

javascript 复制代码
class Animal{
  name:string
  constructor(name:string){
    this.name = name
  }

  eat(){
    //父类定义一个通用方法,具体吃什么不知道?让继承的子类去实现,每一个子类的表现不一样
    console.log("eat 的方法")
  }
}
class Dog extends Animal{
  constructor(name:string){
    super(name)
  }
  eat() {
    console.log(this.name + '吃肉')
  }
}
class Cat extends Animal{
  constructor(name:string){
    super(name)
  }
  eat() {
    console.log(this.name + '吃🐟')
  }
}

三、 抽象方法、抽象类

1、TypeScript 中的抽象类:它是提供其它类继承的基类,不能直接被实例化

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

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

4、抽象类和抽象方法用来定义标准。标准:Animal 这个类要求它的子类必须要包含 eat 方法

javascript 复制代码
abstract class Animal{
  name:string
  constructor(name:string){
    this.name = name
  }
  eat(){
    console.log("eat 的方法")
  }
  abstract run():any //在子类中必须实现
}
class Dog extends Animal{
  constructor(name:string){
    super(name)
  }
  eat() {
    console.log(this.name + '吃肉')
  }
  // 抽象类的子类必须要实现抽象类里面的抽象方法
  run() {
    console.log("正在奔跑")
  }
}

let dog = new Dog("小狗狗")
dog.run()
相关推荐
Learn-Share_HY7 分钟前
[Linux]如何設置靜態IP位址?
linux·运维·tcp/ip·ubuntu·static ip
盛夏绽放17 分钟前
Excel导出实战:从入门到精通 - 构建专业级数据报表的完整指南
开发语言·javascript·excel·有问必答
Mintopia19 分钟前
🌀曲面细分求交:在无限细节中捕捉交点的浪漫
前端·javascript·计算机图形学
Mintopia22 分钟前
🧙‍♂️用 Three.js 判断一个点是否在圆内 —— 一次圆心和点的对话
前端·javascript·three.js
ttod_qzstudio33 分钟前
TypeScript 配置全解析:tsconfig.json、tsconfig.app.json 与 tsconfig.node.json 的深度指南
typescript·node.js·json
PanZonghui44 分钟前
用项目说话:我的React博客构建成果与经验复盘
前端·react.js·typescript
挽淚1 小时前
JavaScript 数组详解:从入门到精通
javascript
言兴1 小时前
教你如何理解useContext加上useReducer
前端·javascript·面试
FanetheDivine1 小时前
过于ts的ts不是好ts
typescript
sunbyte1 小时前
50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | GoodCheapFast(Good - Cheap - Fast三选二开关)
前端·javascript·css·vue.js·tailwindcss