欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

typescript静态属性,静态方法,多态,抽象类

程序员文章站 2022-03-05 09:13:23
...

1.静态属性,静态方法

class Person {
  name: string;
  static age: number = 20; //定义静态属性
  //构造函数
  constructor(name: string) {
    this.name = name;
  }
  //静态方法 无返回值
  static run(): void {
    console.log(`${Person.age}静态属性`); //获取静态属性,结果是20静态属性
    //不能直接获取内部的属性 比如this.name
  }
  work(): string {
    return `我是${this.name}`;
  }
}
let p = new Person("张三"); //实例化
Person.run(); //结果是20静态属性 调用静态方法
console.log(p.work());
console.log(Person.age); //调用静态属性

2.多态

//多态 属于继承
class Animal {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
  //具体吃什么不知道   具体吃由子类去实现,每个子类表现不一样
  //父类定义方法 不去实现
  eat() {
    console.log("吃的方法");
  }
}
class Dog extends Animal {
  constructor(name: string) {
    super(name);
  }
  eat() {
    return `狗${this.name}再吃东西`;
  }
}
class Cat extends Animal {
  constructor(name: string) {
    super(name);
  }
  eat() {
    return `猫${this.name}再吃东西`;
  }
}

3.抽象

抽象类提供其他继承的基类,不能被实例化

用abstract定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现,并且必须在派生类中实现

abstract抽象方法必须放在抽象类里面

//抽象 一般用于制定标准
abstract class Animal {
  name: string;
  protected constructor(name: string) {
    //constructor尽量设置成protected
    this.name = name;
  }
  //抽象方法
  abstract eat(): any;
  //非抽象方法派生类可以不实现
  run(): void {
    alert(`父类非抽象方法:${this.name}`);
  }
}

//派生类 子类
class Dog extends Animal {
  constructor(name: any) {
    super(name);
  }
  //派生类必须实现抽象方法,不实现会报错
  eat(): void {
    console.log(this.name);
  }
}
let d = new Dog("dg");
d.eat(); //结果是dg
d.run(); //alert出来 父类非抽象方法:dg

 

相关标签: typescript