16 类与继承 🏫之访问修饰符

在上一章中,我们详细探讨了类型Script中“类”的基本概念以及如何使用“继承”和“多态”来重用和扩展我们的类。在本章中,我们将进一步探讨类的“访问修饰符”,它们在控制属性和方法的可访问性方面发挥着重要作用。

访问修饰符的概述

在TypeScript中,访问修饰符有三种类型:

  1. public:公有访问修饰符,默认修饰符,表示该属性或方法可以在类的任何地方以及类的外部访问。
  2. protected:受保护的访问修饰符,表示该属性或方法只能在类本身及其子类中访问。
  3. private:私有访问修饰符,表示该属性或方法只能在类的内部访问,外部无法访问。

理解这些访问修饰符对于更好地封装和管理代码至关重要。接下来,我们将通过示例来深入理解每个修饰符的具体用法。

1. public 修饰符

public 修饰符表示属性和方法可以在任何地方访问。我们来看看一个简单的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Person {
public name: string;

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

public greet(): string {
return `Hello, my name is ${this.name}`;
}
}

const john = new Person("John");
console.log(john.greet()); // 输出: Hello, my name is John

在上面的例子中,name属性和greet方法都是public,这意味着我们可以在类的外部直接访问和调用这些属性和方法。

2. protected 修饰符

protected 修饰符限制访问,仅允许在类及其子类内部访问。来看一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Animal {
protected species: string;

constructor(species: string) {
this.species = species;
}
}

class Dog extends Animal {
constructor(name: string) {
super("Dog");
console.log(`This is a ${this.species}, named ${name}.`);
}
}

const myDog = new Dog("Buddy"); // 输出: This is a Dog, named Buddy.
// console.log(myDog.species); // 错误: Property 'species' is protected and only accessible within class 'Animal' and its subclasses.

在这个例子中,species属性被声明为protected,这意味着子类Dog可以访问它,但在类的外部尝试访问时将会报错。

3. private 修饰符

private 修饰符进一步限制访问,仅允许在类的内部进行访问。如下例所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class BankAccount {
private balance: number;

constructor(initialBalance: number) {
this.balance = initialBalance;
}

public deposit(amount: number) {
this.balance += amount;
}

public getBalance(): number {
return this.balance;
}
}

const account = new BankAccount(100);
account.deposit(50);
console.log(account.getBalance()); // 输出: 150
// console.log(account.balance); // 错误: Property 'balance' is private and only accessible within class 'BankAccount'.

在这里,balance属性被标记为private,意味着它无法在类的外部直接访问。我们只能通过类提供的公共方法来间接访问这个属性。

4. 总结

通过使用访问修饰符,TypeScript允许我们以更细致的粒度控制类的成员的可访问性。这不仅有助于增强封装性,还能使代码结构更明确。具体而言:

  • 使用 public 使得类成员可以被外部代码自由访问。
  • 使用 protected 限制成员仅在类及其派生类中访问。
  • 使用 private 完全封装成员,以防外部访问。

在后续的教程中,我们将继续向前推进,探讨“模块与命名空间”中模块的定义与使用,进一步提高我们的TypeScript编程能力。

16 类与继承 🏫之访问修饰符

https://zglg.work/typescript-zero/16/

作者

AI免费学习网(郭震)

发布于

2024-09-14

更新于

2024-09-14

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论