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()
相关推荐
WeiXin_DZbishe2 分钟前
基于springboot大学生提问箱系统-计算机毕设【课程设计】72593
javascript·vue.js·spring boot·vscode·python·node.js·php
何何____1 小时前
js常见继承方法详解
前端·javascript
蜡台2 小时前
Vue 3 原生 ESM 开发实战:不用打包工具,从零搭建组件化应用
前端·javascript·vue.js·html
用户298698530142 小时前
在 React 中使用 JavaScript 将 HTML 转换为图片
javascript·react.js·html
寻缘千鹤2 小时前
LogicFlow流程图 PNG 导出「线上按钮置灰、无反应」故障复盘
前端·javascript·vue.js
李少兄2 小时前
JavaScript 运算符完全指南
java·开发语言·javascript
IMPYLH3 小时前
HTML 的 <rp> 元素
前端·javascript·html
冰水不凉4 小时前
CodeX 在 Ubuntu 下 vscode 插件的 bug 问题
vscode·ubuntu·bug
单线程_014 小时前
从案例分析 Vue3 Tokenizer+Parser 源码五
前端·javascript·vue.js
passerby606113 小时前
如何自己造一个时间处理库
前端·javascript·github