当前位置: 首页 > news >正文

10. TypeScript面向对象的类(Class)

在 TypeScript 中,类是面向对象编程的基础,它们提供了一种方式来封装数据和行为。本文将详细介绍 TypeScript 中类的概念和用法。TypeScript扩展了ES的功能,跟JAVA关于面向对象的概念和写法很类似。

1. 类的基本概念

在 TypeScript 中,类是一个模板,类是一个模板,它定义了如何创建对象,以及对象的行为和属性。类的定义包括两个部分:类的属性和类的方法。属性是类的变量,它们描述了类的状态。方法是类的函数,它们描述了类的行为。

class Car {color: string;constructor(color: string) {this.color = color;}drive() {console.log('Driving...');}
}

2. 继承与多态

TypeScript 支持继承,这是面向对象编程的一个重要特性。继承是面向对象编程的一个重要特性,它允许我们创建一个新的类,这个新的类继承了一个已存在的类的属性和方法。这样,我们就可以在新的类中添加新的属性和方法,或者重写已存在的属性和方法,以满足新的需求。

多态是指子类可以被当作父类来使用。这意味着如果一个函数接受一个父类作为参数,那么它也可以接受任何一个子类作为参数。

class Tesla extends Car {autopilot: boolean;constructor(color: string, autopilot: boolean) {super(color);this.autopilot = autopilot;}selfDrive() {if (this.autopilot) {console.log('Self-driving...');}}
}

3. 修饰符(public, private, protected)

TypeScript 提供了 publicprivateprotected 三种访问修饰符。

  • public:成员可以在任何地方访问。
  • private:成员只能在类中访问。
  • protected:成员可以在类和子类中访问。
class Car {public color: string;private speed: number;protected engine: string;
}

4. 抽象类

抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类可以包含抽象方法,这些方法在抽象类中没有实现,在子类中必须被实现。抽象类的主要目的是提供一个通用的定义,子类可以根据自己的需求实现这个定义。

abstract class Vehicle {abstract wheels: number;startEngine() {console.log('Engine started...');}
}class Bike extends Vehicle {wheels = 2;
}

5. 类与接口

在 TypeScript 中,接口可以用来描述类的结构,类可以实现一个或多个接口。接口定义了一组方法和属性,类必须实现接口中的所有方法和属性。这提供了一种强大的方式来保证类的一致性。

interface Drivable {startEngine(): void;drive(distance: number): void;
}class Car implements Drivable {startEngine() {console.log('Engine started...');}drive(distance: number) {console.log(`Driving for ${distance} miles...`);}
}

总结

TypeScript 的类提供了强大的面向对象编程特性,包括类的基本概念、继承与多态、访问修饰符、抽象类以及类与接口的关系。希望这篇文章能帮助你理解和使用 TypeScript 的类。

相关文章:

  • vue2转vue3一些属性使用方法总结 (持续更新中)
  • MySql并发事务问题
  • winform datagridView 一次删除20000条数据
  • SpringBoot快速入门笔记(5)
  • GPT提示词分享 —— 中医
  • mysql中表的设计
  • 帝国CMS模板源码整站安装说明(图文)
  • APIFY集成客服系统:提升用户运营效率
  • 技术 SEO 初学者指南
  • hadoop:案例:将顾客在京东、淘宝、多点三家平台的消费金额汇总,然后先按京东消费额排序,再按淘宝消费额排序
  • 详解 Redis 在 Centos 系统上的安装
  • STM32为什么不能跑Linux?
  • Linux、Docker、Brew、Nginx常用命令
  • 高新技术企业上市要达到什么条件
  • Linux入门攻坚——18、SELinux、Bash脚本编程续
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Flex布局到底解决了什么问题
  • leetcode98. Validate Binary Search Tree
  • React Transition Group -- Transition 组件
  • Spring-boot 启动时碰到的错误
  • Twitter赢在开放,三年创造奇迹
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 免费小说阅读小程序
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 一文看透浏览器架构
  • 栈实现走出迷宫(C++)
  • 昨天1024程序员节,我故意写了个死循环~
  • ​第20课 在Android Native开发中加入新的C++类
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (4)Elastix图像配准:3D图像
  • (4)事件处理——(7)简单事件(Simple events)
  • (zhuan) 一些RL的文献(及笔记)
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (十六)串口UART
  • (一)u-boot-nand.bin的下载
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET学习全景图
  • .net中生成excel后调整宽度
  • // an array of int
  • ??eclipse的安装配置问题!??
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [Assignment] C++1
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [C/C++随笔] char与unsigned char区别
  • [IE编程] 打开/关闭IE8的光标浏览模式(Caret Browsing)
  • [LeetCode] 19. 删除链表的倒数第 N 个结点
  • [MySQL--进阶篇]存储引擎的体系结构、简介、特点、选择
  • [office] 怎么在Excel2003菜单栏自定义一个选项卡 #其他#微信#知识分享
  • [one_demo_18]js定时器的示例