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

本文深入探讨 TypeScript 中的静态属性和方法,解析如何在类中使用它们,以及它们与实例属性的区别。同时,文章详细介绍了多态的概念,通过继承展示不同子类如何实现同一父类方法,表现出多样化的特性。最后,讲解了抽象类和抽象方法的使用,解释了抽象类为何不能被实例化,以及如何通过派生类实现抽象方法。
摘要由CSDN通过智能技术生成

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值