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

【TS】九天学会TS语法——5.TypeScript的类

💯 欢迎光临清清ww的博客小天地💯

🔥 个人主页:【清清ww】🔥

📚 系列专栏:vue3 | TypeScript 📚

🌟 学习本无底,前进莫徬徨。🌟

开始学习!

目录

一、类定义

二、构造函数

三、访问修饰符

四、继承

五、多态

1.接口与多态

2.继承与多态

在 TypeScript 中,类(Class)是面向对象编程的核心概念之一。本文将详细介绍 TypeScript 类的定义、构造函数、访问修饰符、继承和多态。

一、类定义

在 TypeScript 中,类是一种用于创建对象的蓝图,通过使用 class 关键字 来创建。类可以包含属性(数据成员)和方法(函数成员)。

类定义的基本语法如下:

class ClassName {// 属性property: type;// 方法method(): void {// 方法体}
}

举个简单的例子:

class Person {// 属性name: string;age: number;// 方法greet(): void {console.log(`你好,我是 ${this.name} ,我${this.age}岁了`);}
}// 创建类的实例
const person = new Person('清清ww', 3);// 调用方法
person.greet(); // 输出: 你好,我是清清ww,我三岁了.

二、构造函数

构造函数是类的一个特殊方法,用于在创建对象时初始化对象的属性。构造函数的名称与类名相同,并且没有返回类型

构造函数的定义如下:

constructor(参数列表) {// 构造函数的代码
}

参数列表中的参数可以是任意类型的,这些参数用于接收外部传入的值,以便在构造函数内部使用。在构造函数内部,可以使用 this 关键字来引用当前正在创建的实例,并将参数的值赋给实例的属性。

下面是一个包含构造函数的 TypeScript 类的例子:

class Person {// 属性name: string;age: number;// 构造函数constructor(name: string, age: number) {this.name = name;this.age = age;}// 方法greet(): void {console.log(`你好,我是 ${this.name} ,我${this.age}岁了.`);}
}// 创建类的实例
const person = new Person('清清ww', 3);// 调用方法
person.greet(); // 输出: 你好,我是清清ww,我三岁了.

在这个例子中,Person 类的构造函数接受两个参数:name 和 age。当使用 new 关键字创建 Person 类的实例时,构造函数会被自动调用,并将传入的参数值赋给实例的 name 和 age 属性。

构造函数还可以执行其他初始化任务,例如调用其他方法、设置默认值或进行其他必要的设置。构造函数是类实例化过程中的一个重要部分,它确保了每个实例在创建时都处于一个已知且一致的状态。

三、访问修饰符

TypeScript 提供了三种访问修饰符:publicprivate 和 protected用于控制类成员的访问级别

那么它们有什么区别呢?通过一个例子来说明。

首先,我们定义一个 Person 类,其中 name 属性为 publicage 属性为 private

class Person {public name: string; // 公共属性,可以在类的外部访问private age: number; // 私有属性,只能在类的内部访问constructor(name: string, age: number) {this.name = name;this.age = age;}public greet() {console.log(`你好,我是 ${this.name} ,我${this.age}岁了.`);}
}const person = new Person('清清', 3);
person.greet(); // 可以调用 public 方法
console.log(person.name); // 可以访问 public 属性
// console.log(person.age); // 错误:Property 'age' is private and only accessible within class 'Person'.

name 属性为 public,所以它可以在类的外部被访问。因此,我们可以直接通过 person.name 访问 name 属性的值。

然而,age 属性为 private,它只能在 Person 类的内部被访问。尝试在类的外部通过 person.age 访问 age 属性会导致一个错误,因为外部代码无法访问私有成员

现在,让我们将 age 属性的访问修饰符更改为 protected

class Person {public name: string; // 公共属性,可以在类的外部访问protected age: number; // 受保护属性,只能在类的内部和子类中访问constructor(name: string, age: number) {this.name = name;this.age = age;}public greet() {console.log(`你好,我是 ${this.name} ,我${this.age}岁了.`);}
}const person = new Person('清清', 3);
person.greet(); // 可以调用 public 方法
console.log(person.name); // 可以访问 public 属性
// console.log(person.age); // 错误:Property 'age' is protected and only accessible through an instance of 'Person'.

age 属性为 protected,它可以在 Person 类的内部被访问,也可以在 Person 类的子类中被访问,但仍然不能在类的外部被访问。尝试在类的外部通过 person.age 访问 age 属性会导致一个错误,因为外部代码无法访问受保护成员。

总之,public 成员可以在任何地方访问,private 成员只能在类的内部访问,而 protected 成员可以在类的内部和子类中访问。

其实很好理解,假如你是一个富翁:

你为大家修了一条路,这条路是公共的,大家都可以用 —— public

你有一个专用机器人,除了你别人无法访问 —— private

你的资产,除了你,还可以继承给你的子孙用 —— protected。

四、继承

在 TypeScript 中,可以使用 extends 关键字实现类的继承。子类可以继承父类的属性和方法,并可以添加自己的属性和方法。详情见上节:【TS】九天学会TS语法——4.TypeScript 接口深入解析

class ParentClass {// 父类属性和方法
}class ChildClass extends ParentClass {// 子类属性和方法
}

五、多态

多态是面向对象编程(OOP)中的一个核心概念,允许用同样的方式处理不同的对象,即使这些对象属于不同的类。

举个例子,你有一个画笔,你可以用它来画圆、画方形、画三角形等等。无论你画什么,你都是用同样的画笔,只是画的东西不同。

在编程中,多态就像画笔。你有一个方法(比如 draw()),它可以被不同的对象(比如 CircleRectangleTriangle)使用。每个对象用自己的方式实现 draw() 方法,但你可以用同样的方式调用它,就像用画笔画画一样。

有了多态,可以编写更通用的代码,处理多种不同类型的对象,而不需要知道具体的对象类型,代码就更灵活、更可扩展。

在 TypeScript 中,多态通常通过接口、继承和重写来实现。

1.接口与多态

接口定义了一组规范,任何实现了该接口的类都必须遵循这些规范。通过接口,我们可以定义一个多态的行为,然后让不同的类来实现这个接口。

举个例子:

// 定义一个Animal接口,它包含一个方法makeSound
interface Animal {makeSound(): void; // makeSound方法没有参数,也没有返回值
}// Dog类实现了Animal接口,这意味着它必须提供makeSound方法的实现
class Dog implements Animal {makeSound() {console.log('Woof!'); // Dog类中的makeSound方法输出"Woof!"}
}// Cat类也实现了Animal接口,同样需要提供makeSound方法的实现
class Cat implements Animal {makeSound() {console.log('Meow!'); // Cat类中的makeSound方法输出"Meow!"}
}// 定义一个函数animalSound,它接受一个Animal类型的参数
function animalSound(animal: Animal) {animal.makeSound(); // 调用传入对象的makeSound方法
}// 创建Dog和Cat的实例
const dog = new Dog();
const cat = new Cat();// 调用animalSound函数,传入dog实例,输出"Woof!"
animalSound(dog); // 调用animalSound函数,传入cat实例,输出"Meow!"
animalSound(cat); 

Animal 接口定义了一个 makeSound 方法。Dog 和 Cat 类都实现了 Animal 接口,并且提供了自己的 makeSound 方法实现。animalSound 函数接受一个 Animal 类型的参数,并调用其 makeSound 方法。无论传入的是 Dog 还是 Cat 对象,animalSound 函数都能正确地调用对应的方法,这就是多态。

2.继承与多态

继承是另一种实现多态的方式。通过继承,子类可以继承父类的所有属性和方法,也可以添加新的属性和方法或者覆盖(重写)父类的方法。

class Animal {makeSound() {console.log('Some sound!');}
}class Dog extends Animal {makeSound() {super.makeSound(); // 调用父类的方法console.log('Woof!');}
}class Cat extends Animal {makeSound() {console.log('Meow!');}
}function animalSound(animal: Animal) {animal.makeSound();
}const dog = new Dog();
const cat = new Cat();animalSound(dog); // 输出: Some sound! Woof!
animalSound(cat); // 输出: Meow!

Animal 类有一个 makeSound 方法。Dog 和 Cat 类继承自 Animal 类,并重写了 makeSound 方法。animalSound 函数接受一个 Animal 类型的参数,并调用其 makeSound 方法。由于 Dog 和 Cat 都继承自 Animal,它们都可以作为 Animal 类型的参数传递给 animalSound 函数。


🚀感谢您的细心品读,完成了这篇关于【TS】九天学会TS语法——5.TypeScript的类的旅程。 🚀

🎉 您的每一个鼓励都是我不断更新的动力,不要忘记点赞收藏🎉

🔍 期待与您一同深入前端技术的海洋,共同探索那些未知的宝藏,揭开Web开发的层层迷雾。🔍

🌟 🌈 感恩您的支持与同行,愿我们的前端征途越走越远!🌈 🌟


http://www.mrgr.cn/news/68343.html

相关文章:

  • lsblk 命令学习
  • linux基础知识
  • 【网络】自定义协议——序列化和反序列化
  • GAN的基本原理
  • ros与mqtt相互转换
  • Spark on YARN:Spark集群模式之Yarn模式的原理、搭建与实践
  • 气膜球幕:打造引人注目的展览新选择—轻空间
  • InsectaIntel 智能昆虫识别平台
  • 无人机影像处理系统技术选型
  • 【数据集】【YOLO】【目标检测】摔跤识别数据集 5097 张,YOLO行人摔倒识别算法实战训练教程!
  • node-sass下载报错解决方案
  • Java语法糖,你用过哪些?
  • 深入学习指针(5)!!!!!!!!!!!!!!!
  • Feign中的RequestInterceptor详解及配置
  • 万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
  • 智能指针中的循环引用具体解决流程
  • 数据去重和去噪技术
  • 易泊车牌识别相机:智能与精准的完美结合
  • Java反射、注解、泛型——针对实习面试
  • Spark 中的 RDD 分区的设定规则与高阶函数、Lambda 表达式详解
  • 吹爆!2024最详细的大模型学习路线已整理!手把手带你高效入门,大模型论文全打通!(大模型微调/大模型学习路线/大模型入门)
  • 【华为机试题】 [Python] 贪心的商人
  • px4 wai bu ding wei
  • XSS注入攻击概述与SpringBoot下的防范策略
  • 【赵渝强老师】Redis的AOF数据持久化
  • MYSQL学习笔记(二)--认识索引、使用索引、索引失效