TypeScript 从入门到进阶之基础篇(十) 抽象类篇

这篇具有很好参考价值的文章主要介绍了TypeScript 从入门到进阶之基础篇(十) 抽象类篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TypeScript 从入门到进阶之基础篇(十) 抽象类篇,TypeScript 从入门到进阶,typescript,JavaScript,javascript

系列文章目录

TypeScript 从入门到进阶系列

  1. TypeScript 从入门到进阶之基础篇(一) ts基础类型篇
  2. TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇
  3. TypeScript 从入门到进阶之基础篇(三) 元组类型篇
  4. TypeScript 从入门到进阶之基础篇(四) symbol类型篇
  5. TypeScript 从入门到进阶之基础篇(五) 枚举类型篇
  6. TypeScript 从入门到进阶之基础篇(六) 类型(断言 、推论、别名)| 联合类型 | 交叉类型 篇
  7. TypeScript 从入门到进阶之基础篇(七)泛型篇
  8. TypeScript 从入门到进阶之基础篇(八)函数篇
  9. TypeScript 从入门到进阶之基础篇(九) Class类篇
    持续更新中…


前言

TypeScript 抽象类是一种用于定义其他类的基础类,它不能直接被实例化,只能被继承。抽象类可以包含属性、方法、以及其他抽象方法的定义。抽象方法只有定义而没有具体实现,需要在具体的子类中实现。


一、抽象类(abstract)的使用

抽象类通过使用关键字 abstract 来定义,而抽象方法通过在方法前加上关键字 abstract 来定义。抽象类和抽象方法用于定义类的行为和结构,并且可以提供一些通用的实现或规范,以供子类继承和实现。

抽象类在面向对象编程中有以下特点:

  1. 不能直接实例化:抽象类不能被直接实例化只能被继承后使用。
  2. 可以包含属性和方法:抽象类中可以定义属性和方法,可以有具体实现的方法和抽象方法。
  3. 可以包含抽象方法:抽象类中可以定义抽象方法,这些方法只有方法的声明而没有具体实现,需要在具体的子类中实现。
  4. 子类必须实现抽象方法:当一个类继承了抽象类时,它必须实现抽象类中的所有抽象方法。

下面是一个使用抽象类的例子:

//抽象类
abstract class Animal {
  name: string;

  constructor(name: string) {
    this.name = name;
  }
  //抽象方法  只能有方法的声明而没有具体实现
  //要实现只能在继承此类之后去实现
  abstract makeSound(): void;

  move(distance: number = 0) {
    console.log(`${this.name} moved ${distance}m`);
  }
}

//Dog 继承 Animal 抽象类
class Dog extends Animal {
  constructor(name: string) {
    super(name);
  }

	//将Animal 抽象类中的 抽象方法 进行实例化
  makeSound() {
    console.log(`${this.name} barks`);
  }
}

let dog = new Dog('Buddy');
dog.makeSound();  // 输出: "Buddy barks"
dog.move(10);    // 输出: "Buddy moved 10m"

在这个例子中,Animal 类是一个抽象类,它有一个抽象方法 makeSound 和一个实现方法 moveDog 类继承了 Animal 类,并实现了 makeSound 方法。

你不能直接实例化抽象类,但可以通过继承抽象类的方式创建实例。在这个例子中,我们创建了一个名为 dogDog 类的实例,并调用了它的 makeSoundmove 方法。

二、抽象类(abstract)的使用场景

TypeScript抽象类的使用场景:

  1. 抽象类可以被用作基类,它提供了一个通用的模板或蓝图,用于派生出其他类。
  2. 抽象类可以定义抽象方法,这些方法在派生类中必须被实现。这样可以确保派生类具有某些特定的功能或行为。
  3. 抽象类可以实现一些通用的功能,而不用在每个派生类中重新实现这些功能。这样可以使代码更加可维护和可扩展。
  4. 抽象类可以用于限制实例化。它们不能直接被实例化,只能被用作继承。
  5. 抽象类可以定义属性和方法,这些属性和方法可以被派生类继承和重写。

总之,抽象类在需要定义一个通用模板或蓝图,并确保派生类具有某些特定功能或行为的情况下非常有用。它们可以提供代码重用、可维护性和可扩展性。

一个常见的应用场景案例是在Web应用开发中使用抽象类来建模和组织组件。

假设我们正在开发一个在线购物应用,其中有多种类型的商品,例如电子产品、服装和食品。我们可以使用抽象类来定义一个通用的商品类,并为每种具体类型的商品创建一个子类。

首先,我们定义一个抽象商品类:

abstract class Product {
  protected name: string;
  protected price: number;

  constructor(name: string, price: number) {
    this.name = name;
    this.price = price;
  }

  abstract getDescription(): string;
}

然后,我们创建几个具体类型的商品类:

class Electronics extends Product {
  protected brand: string;

  constructor(name: string, price: number, brand: string) {
    super(name, price);
    this.brand = brand;
  }

  getDescription(): string {
    return `This ${this.brand} ${this.name} costs $${this.price}`;
  }
}

class Clothing extends Product {
  protected size: string;

  constructor(name: string, price: number, size: string) {
    super(name, price);
    this.size = size;
  }

  getDescription(): string {
    return `This ${this.size} ${this.name} costs $${this.price}`;
  }
}

class Food extends Product {
  protected expirationDate: string;

  constructor(name: string, price: number, expirationDate: string) {
    super(name, price);
    this.expirationDate = expirationDate;
  }

  getDescription(): string {
    return `This ${this.name} expires on ${this.expirationDate}`;
  }
}

现在,我们可以使用这些具体类型的商品类创建实例,并调用它们的getDescription方法来获取商品的描述:

const iphone = new Electronics('iPhone', 999, 'Apple');
console.log(iphone.getDescription()); // 输出: This Apple iPhone costs $999

const shirt = new Clothing('T-Shirt', 29, 'M');
console.log(shirt.getDescription()); // 输出: This M T-Shirt costs $29

const milk = new Food('Milk', 2.99, '2022-01-31');
console.log(milk.getDescription()); // 输出: This Milk expires on 2022-01-31

这个例子中,抽象类Product定义了一个共享的属性和方法,而具体的商品类继承了这些属性和方法,并根据自己的特性实现了getDescription方法。一个常见的应用场景案例是在Web应用开发中使用抽象类来建模和组织组件。

假设我们正在开发一个在线购物应用,其中有多种类型的商品,例如电子产品、服装和食品。我们可以使用抽象类来定义一个通用的商品类,并为每种具体类型的商品创建一个子类。

首先,我们定义一个抽象商品类:

abstract class Product {
  protected name: string;
  protected price: number;

  constructor(name: string, price: number) {
    this.name = name;
    this.price = price;
  }

  abstract getDescription(): string;
}

然后,我们创建几个具体类型的商品类:

class Electronics extends Product {
  protected brand: string;

  constructor(name: string, price: number, brand: string) {
    super(name, price);
    this.brand = brand;
  }

  getDescription(): string {
    return `This ${this.brand} ${this.name} costs $${this.price}`;
  }
}

class Clothing extends Product {
  protected size: string;

  constructor(name: string, price: number, size: string) {
    super(name, price);
    this.size = size;
  }

  getDescription(): string {
    return `This ${this.size} ${this.name} costs $${this.price}`;
  }
}

class Food extends Product {
  protected expirationDate: string;

  constructor(name: string, price: number, expirationDate: string) {
    super(name, price);
    this.expirationDate = expirationDate;
  }

  getDescription(): string {
    return `This ${this.name} expires on ${this.expirationDate}`;
  }
}

现在,我们可以使用这些具体类型的商品类创建实例,并调用它们的getDescription方法来获取商品的描述:

const iphone = new Electronics('iPhone', 999, 'Apple');
console.log(iphone.getDescription()); // 输出: This Apple iPhone costs $999

const shirt = new Clothing('T-Shirt', 29, 'M');
console.log(shirt.getDescription()); // 输出: This M T-Shirt costs $29

const milk = new Food('Milk', 2.99, '2022-01-31');
console.log(milk.getDescription()); // 输出: This Milk expires on 2022-01-31

这个例子中,抽象类Product定义了一个共享的属性和方法,而具体的商品类继承了这些属性和方法,并根据自己的特性实现了getDescription方法。文章来源地址https://www.toymoban.com/news/detail-796048.html

到了这里,关于TypeScript 从入门到进阶之基础篇(十) 抽象类篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 两小时快速入门 TypeScript 基础(二)面向对象

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端(Node.js 等) 📃 个人状态: 2023届本科毕业生,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力 n 年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/

    2024年02月12日
    浏览(33)
  • TypeScript零基础入门之背景介绍和环境安装

    一、什么是TypeScript TypeScript 是一种由微软开发和维护的开源编程语言。它是 JavaScript 的超集,意味着任何 JavaScript 程序都是一种有效的 TypeScript 程序。 TypeScript 添加了 静态类型、类、接口、枚举和命名空间 等概念,同时 支持ES6特性 。 TypeScript 被视为是 JavaScript 的 增强版

    2024年02月10日
    浏览(47)
  • 猫头虎分享:探索TypeScript的世界 — TS基础入门 ‍

    博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接 : 🔗 精选专栏 : 《面试题大全》 — 面试准备的宝典! 《IDEA开发秘籍》 — 提升你的IDEA技能! 《100天精通Golang》 — Go语言学习之旅! 领域矩阵 : 🌐 猫头虎技术领域矩阵 : 深入探索

    2024年01月21日
    浏览(71)
  • 两小时快速入门 TypeScript 基础(一)工作流、基本类型、高级类型

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端(Node.js 等) 📃 个人状态: 2023届本科毕业生,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力 n 年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/

    2024年02月11日
    浏览(41)
  • TypeScript与JavaScript

    博主作品: 《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMV

    2024年02月05日
    浏览(44)
  • TypeScript 进阶之泛型

    避免代码重复和创建可重用类型是编写干净代码的重要部分。 将所有类型属性都设置为可选 Required 与 Partial 相反。它构造一个类型,其中需要该类型的所有属性。它可用于确保没有可选属性出现在类型中。 多属性的对象中摘取某些属性。 键可以是字符串文字或字符串文字的

    2024年01月23日
    浏览(39)
  • 单例模式——javascript和typescript

    确保某个方法或者类只有一个是咧。而且自行实例子并向整个系统提供这个实例。 某个方法或类只能一个; 必须自行创建这个实例 必须自行向整个系统提供这个实例。

    2024年02月05日
    浏览(49)
  • 【TypeScript】TS进阶-装饰器(九)

    🐱个人主页: 不叫猫先生 🙋‍♂️作者简介:前端领域新星创作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏:vue3从入门到精通、TypeScript从入门到实践 📢资料领取:前端进阶资料以及文中源码可以找我免费领取 🔥社群招

    2024年02月21日
    浏览(39)
  • 一文了解JavaScript 与 TypeScript的区别

    TypeScript 和 JavaScript 是两种互补的技术,共同推动前端和后端开发。在本文中,我们将带您快速了解JavaScript 与 TypeScript的区别。   一、TypeScript 和 JavaScript 之间的区别 JavaScript 和 TypeScript 看起来非常相似,但有一个重要的区别。 JavaScript 和 TypeScript 之间的主要区别在于 JavaS

    2024年02月14日
    浏览(51)
  • 【TypeScript】进阶之路语法细节,类型和函数

    类型别名(type)的使用 为解决给联合类型的类型定义过长的问题 使用类型别名 接口(interface)的声明的使用 使用interface声明 相比较类型别名,少了= 二者区别: 类型别名和接口声明非常相似,在定义对象的时候,可以任意选择使用 主要区别: type类型使用范围更广 type定

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包