当前位置:首页 > 科技  > 软件

如何在 TypeScript 中使用类和继承

来源: 责编: 时间:2023-10-18 17:58:37 438观看
导读“TypeScript是一种编程语言,它是JavaScript的超集。它通过添加静态类型、类、接口和模块等功能来扩展JavaScript”class Hero { name: string; age: number; constructor(name: string, age: number) { this.na

qhx28资讯网——每日最新资讯28at.com

TypeScript是一种编程语言,它是JavaScript的超集。它通过添加静态类型、类、接口和模块等功能来扩展JavaScriptqhx28资讯网——每日最新资讯28at.com

qhx28资讯网——每日最新资讯28at.com

class Hero {  name: string;  age: number;  constructor(name: string, age: number) {    this.name = name;    this.age = age;  }  say(): void {    console.log(`my name is ${this.name}`);  }}

在上面的代码中,我们定义了一个名为Hero的类,它具有name和age属性,以及一个say方法。构造函数用于初始化对象的属性。qhx28资讯网——每日最新资讯28at.com

qhx28资讯网——每日最新资讯28at.com

通过类的定义,我们可以创建多个具有相同属性和行为的对象,实现代码的复用和封装。qhx28资讯网——每日最新资讯28at.com

const Jieke = new Hero('jieke', 28)Jieke.say();  // 输出:my name is jieke

继承和子类

在面向对象编程中,继承是一种重要的概念。通过继承,我们可以创建一个类的子类(也称为派生类),并继承其属性和方法。子类可以扩展或修改父类的功能,从而实现代码的重用和扩展qhx28资讯网——每日最新资讯28at.com

在TypeScript中,我们使用extends关键字来指定一个类继承自另一个类qhx28资讯网——每日最新资讯28at.com

class Superman extends Hero {  heroId: string;  constructor(name: string, age: number, heroId: string) {    super(name, age);    this.heroId = heroId;  }  skill(): void {    console.log(`${this.name}_${this.heroId}.`);  }}

我们定义了一个名为Superman的子类,它继承自Hero父类。子类具有自己的属性heroId,并通过调用super关键字来调用父类的构造函数。qhx28资讯网——每日最新资讯28at.com

创建子类的实例与创建父类的实例类似:qhx28资讯网——每日最新资讯28at.com

const s1 = new Superman("Batman", 20, "12345");s1.say();  // 输出:my name is Batmans1.skill();  // 输出:Batman_12345

限制类的属性和方法的访问

在TypeScript中,我们可以使用访问修饰符来限制类的属性和方法的访问。以下是几个常用的访问修饰符qhx28资讯网——每日最新资讯28at.com

  • public(默认):可以在类内部和外部访问。
  • private:只能在类内部访问。
  • protected:可以在类内部和子类中访问,但不能在类外部访问。

通过使用访问修饰符,我们可以控制类的成员的可见性,增强了封装性和安全性qhx28资讯网——每日最新资讯28at.com

class Person {  public name: string;  private age: number;  protected gender: string;  constructor(name: string, age: number, gender: string) {    this.name = name;    this.age = age;    this.gender = gender;  }  say() {    console.log(`Hi, my name is ${this.name}.`);  }  private sayAge() {    console.log(`I am ${this.age} years old.`);  }}class Student extends Person {  constructor(name: string, age: number, gender: string) {    super(name, age, gender);  }  sayGender() {    console.log(`My gender is ${this.gender}.`);  }}const person = new Person("Tom", 18, "male");console.log(person.name); // "Tom"console.log(person.age); // Error: Property 'age' is private and only accessible within class 'Person'.console.log(person.gender); // Error: Property 'gender' is protected and only accessible within class 'Person' and its subclasses.const student = new Student("Jane", 20, "female");console.log(student.gender); // "female"

抽象类

在TypeScript中,我们还可以使用抽象类(abstract class)来定义一个不可实例化的基类。抽象类提供了一种模板,用于派生其他类,并定义了一些必须由子类实现的抽象方法。抽象类不能被直接实例化,只能被继承qhx28资讯网——每日最新资讯28at.com

以下是一个抽象类的示例:qhx28资讯网——每日最新资讯28at.com

abstract class Role {    // 定义抽象属性    abstract name:string;     abstract age:number;    // 定义保护属性,每个继承子类都能继承并调用的属性    protected lastPoint!: {x:number,y:number};    protected status!: "run" | "risk" | "die";    // 定义保护方法,每个继承子类都能继承并调用的方法    protected getLastPoint (lastPoint:{x:number,y:number}) {        this.lastPoint = lastPoint;    }    // 定义抽象方法,在子类中重写来执行不同的任务    abstract attack():void;}

继承抽象类的子类实例化对象通过调用同一抽象类规定的抽象方法,来实现了不同的操作,体现了类的多态qhx28资讯网——每日最新资讯28at.com

class antor extends Role {    // 重写抽象属性    name: string = "han";    age: string = 20;    // 重写抽象方法    attack(): void {        console.log("正在被攻击");    }    constructor () {        super();    }}


qhx28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-14000-0.html如何在 TypeScript 中使用类和继承

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 如何让你的Node.js应用程序处理数百万的API请求

下一篇: 如何通过 REST API 和 Spring MVC 提取电视节目详细信息?

标签:
  • 热门焦点
  • 中兴AX5400Pro+上手体验:再升级 双2.5G网口+USB 3.0这次全都有

    2021年11月的时候,中兴先后发布了两款路由器产品,中兴AX5400和中兴AX5400 Pro,从产品命名上就不难看出这是隶属于同一系列的,但在外观设计上这两款产品可以说是完全没一点关系
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 轿车从天而降电动车主被撞身亡 超速抢道所致:现场视频让网友吵翻

    近日,上海青浦区法院判决轿车从天而降电动车主被撞身亡案,轿车车主被判有期徒刑一年。案件显示当时男子驾驶轿车在上海某路段行驶,前车忽然转弯提速超车,
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 重估百度丨大模型,能撑起百度的“今天”吗?

    自象限原创 作者|程心 罗辑2023年之前,对于自己的“今天”,百度也很迷茫。“新业务到 2022 年底还是 0,希望 2023 年出来一个 1。”这是2022年底,李彦宏
  • Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
  • 上海举办人工智能大会活动,建设人工智能新高地

    人工智能大会在上海浦江两岸隆重拉开帷幕,人工智能新技术、新产品、新应用、新理念集中亮相。8月30日晚,作为大会的特色活动之一的上海人工智能发展盛典人工
Top