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()
相关推荐
ShenJLLL3 小时前
vue部分知识点.
前端·javascript·vue.js·前端框架
We་ct6 小时前
LeetCode 105. 从前序与中序遍历序列构造二叉树:题解与思路解析
前端·算法·leetcode·链表·typescript
Never_Satisfied11 小时前
在JavaScript / HTML中,数组查找第一个符合要求元素
开发语言·javascript·html
HelloReader12 小时前
Tauri 2 创建项目全流程create-tauri-app 一键脚手架 + Tauri CLI 手动接入
前端·javascript·vue.js
shix .12 小时前
旅行网站控制台检测
开发语言·前端·javascript
哆啦A梦158812 小时前
Vue3魔法手册 作者 张天禹 016_vue3中一些特定用法介绍
前端·vue.js·typescript
henry10101013 小时前
DeepSeek生成的网页小游戏 - 迷你高尔夫
前端·javascript·游戏·html
伊织萌13 小时前
在 Ubuntu 22.04 上安装 PostgreSQL
linux·服务器·ubuntu·postgresql·云计算
ding_zhikai13 小时前
【个人日记】修复ubuntu屏幕显示不正常
linux·运维·ubuntu
rfidunion13 小时前
ubuntu下使用qemu模拟ARM(二)
linux·arm开发·ubuntu