类的定义和实例化
在 TypeScript 中,类是面向对象编程的基础。通过类,我们可以创建对象的蓝图,定义对象的属性和方法。本教程将详细介绍如何在 TypeScript 中定义类以及如何实例化类。
1. 类的定义
在 TypeScript 中,类的定义使用 class 关键字。一个类通常包含以下几个部分:
- 构造函数 (Constructor): 用于初始化对象的属性。
- 属性 (Properties): 对象的状态。
- 方法 (Methods): 对象的行为。
1.1 基本类定义
以下是一个简单的类定义示例:
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet(): void {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
在这个例子中:
name和age是类的属性。constructor是构造函数,用于初始化name和age。greet是一个方法,用于输出问候语。
1.2 访问修饰符
TypeScript 提供了三种访问修饰符:
- public: 默认修饰符,可以在类的外部访问。
- private: 只能在类的内部访问。
- protected: 可以在类的内部和子类中访问。
例如:
class Person {
private name: string;
protected age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public greet(): void {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
在这个例子中,name 是私有的,只能在 Person 类内部访问;age 是受保护的,可以在 Person 类及其子类中访问。
2. 类的实例化
类的实例化是通过 new 关键字来完成的。实例化后,我们可以调用类的方法和访问类的属性。
2.1 实例化类
以下是如何实例化 Person 类的示例:
const person = new Person("Alice", 30);
person.greet(); // 输出: Hello, my name is Alice and I am 30 years old.
在这个例子中,我们创建了一个 Person 类的实例 person,并调用了 greet 方法。
2.2 访问属性
虽然 name 是私有的,不能直接访问,但我们可以通过公共方法来间接访问它:
class Person {
private name: string;
protected age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public greet(): void {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
public getName(): string {
return this.name;
}
}
const person = new Person("Alice", 30);
console.log(person.getName()); // 输出: Alice
在这个例子中,我们添加了一个 getName 方法,用于返回 name 属性的值。
3. 实践练习
3.1 练习:定义一个 Car 类
定义一个 Car 类,包含以下属性和方法:
- 属性:
brand(品牌),model(型号),year(年份) - 方法:
start(启动),stop(停止)
要求:
brand和model是公共的。year是私有的。start和stop方法分别输出 "Car started" 和 "Car stopped"。
3.2 练习:实例化 Car 类
实例化 Car 类,并调用 start 和 stop 方法。
4. 总结
通过本教程,我们学习了如何在 TypeScript 中定义类以及如何实例化类。类是面向对象编程的核心概念,掌握类的定义和实例化是进一步学习 TypeScript 的基础。
希望本教程能帮助你更好地理解 TypeScript 中的类和对象。继续练习和探索,你将能够编写出更加复杂和功能强大的 TypeScript 程序。