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()
相关推荐
李纲明1 小时前
微信小程序 getSystemInfo 提示已废弃、屏幕高度算错胶囊还对不齐?getWindowInfo 和 getDeviceInfo 怎么接才稳
javascript·微信小程序·小程序·小程序开发·devdiy
FungLeo2 小时前
成为全栈·Vue 管理后台篇·用 fetch 建一层可控的请求内核
前端·javascript·vue.js·http·fetch·formdata·接口封装
用户84298142418103 小时前
ByteJS,让重要的 JavaScript 以字节码运行。
javascript
Zucker n4 小时前
文献发现、课题组织与证据可追溯的论文阅读。
论文阅读·windows·ubuntu
FungLeo4 小时前
成为全栈·Vue 管理后台篇·Vue Router如何守住多角色后台边界
前端·javascript·vue.js·rbac·vue router·路由守卫·前端权限
FungLeo5 小时前
成为全栈·Vue管理后台篇·仪表盘不是几张卡片:组合统计接口与角色视图
前端·javascript·vue.js·rbac·仪表盘·管理后台·tanstack query
程序员大阳5 小时前
HTML+CSS+JS对话式实战(7)-学生端活动报名功能开发
javascript·css·html·活动报名
西安小哥6 小时前
做 Agent 写到第三个小时,我开始给它算账
javascript
西安小哥6 小时前
让大模型操作浏览器跑了两周,我发现瓶颈根本不在模型
javascript
用户298698530146 小时前
用 Python 自动化把 JavaScript 代码转换为 Word 文档
javascript·python·api