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()
相关推荐
竹林8189 小时前
Web3表单签名验证:我用 wagmi 和 ethers 给 DApp 加了一个“免密登录”,踩坑记录全在这了
javascript
用户6990304848759 小时前
try catch使用场景 处理同步代码错误兼容用的
javascript·uni-app
雪碧聊技术9 小时前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
VidDown9 小时前
VidDown 工具站:免费、本地优先的开发者工具箱
javascript·编辑器·音视频·视频编解码·视频
触底反弹11 小时前
🚀 手把手用 HTML5 Canvas 从零打造飞机大战游戏,代码全开源!
前端·javascript·canvas
DJ斯特拉11 小时前
axios快速使用
开发语言·前端·javascript
智通11 小时前
可取消的异步任务与 AbortController
javascript
Hilaku11 小时前
AI 写代码越快,为什么 Code Review 越不能省?
前端·javascript·程序员
HjhIron13 小时前
CSS 3D 世界:从盒子模型到三维空间动画
javascript·css
VidDown13 小时前
显卡处理视频技术详解:从硬解码到 NVENC,GPU 如何让视频处理起飞?
javascript·编辑器·音视频·视频编解码·视频