静态属性、静态方法、抽象类、继承多态
- 一、静态属性和静态方法
-
- 1、回顾ES5中的静态方法
- [2、TS 中定义静态方法和静态属性](#2、TS 中定义静态方法和静态属性)
- 二、多态
- [三、 抽象方法、抽象类](#三、 抽象方法、抽象类)
-
- [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()