七步学会TypeScript - 第四步-类和继承

在TypeScript中

  • 类是一种面向对象编程的基本构建块,它允许你创建具有属性和方法的复杂数据结构。
  • 继承是面向对象编程中的一个重要概念,它允许你基于现有类创建新的类,并在新类中重用和扩展现有类的功能。

下面让我们逐步深入了解这些内容。

1. 创建类和成员函数:

在 TypeScript 中,你可以使用以下方式来创建类,并定义其成员函数:

class Animal {
  name: string;

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

  makeSound() {
    console.log("Animal makes a sound");
  }
}

const cat = new Animal("Cat");
console.log(cat.name); // 输出:"Cat"
cat.makeSound(); // 输出:"Animal makes a sound"

在上述示例中,我们创建了一个 Animal 类,它有一个构造函数和一个名为 makeSound 的成员函数。通过 new 关键字,我们创建了一个 cat 实例,并调用了它的方法和属性。

2. 继承的概念:

继承允许你创建一个新的类,基于已存在的类(称为基类或父类),并继承它的属性和方法。你可以在新类中添加新的属性和方法,或者覆盖基类的方法。

class Dog extends Animal {
  constructor(name: string) {
    super(name); // 调用父类的构造函数
  }

  makeSound() {
    console.log("Dog barks");
  }
}

const dog = new Dog("Buddy");
console.log(dog.name); // 输出:"Buddy"
dog.makeSound(); // 输出:"Dog barks"

在这个示例中,我们创建了一个 Dog 类,它继承自 Animal 类。我们使用 super(name) 调用了父类的构造函数,以便设置 name 属性。我们还覆盖了基类的 makeSound 方法。

通过继承,你可以避免重复编写相似的代码,提高代码的重用性和可维护性。

3. 访问修饰符:

在 TypeScript 中,你可以使用访问修饰符来控制成员的可见性和访问权限。常用的访问修饰符有三种:publicprivateprotected

  • public:默认的修饰符,成员在类内外都可以访问。
  • private:成员只能在类的内部访问。
  • protected:成员可以在类内部以及继承的子类中访问。
class Student {
  private id: number;
  protected name: string;

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

  displayInfo() {
    console.log(`Student ID: ${this.id}, Name: ${this.name}`);
  }
}

通过访问修饰符,你可以控制成员的访问权限,增强代码的封装性和安全性。

下面举几个例子详细说一下访问修饰符

当涉及到访问修饰符时,它们会影响成员(属性和方法)在类内部和类外部的可见性和访问权限。我将为你提供更详细的例子来解释 publicprivateprotected 修饰符的不同用法。

1. public 访问修饰符:
public 是默认的访问修饰符,表示成员可以在类内部和类外部都可以访问。

class Car {
  public make: string;

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

  start() {
    console.log(`Starting the ${this.make} car.`);
  }
}

const myCar = new Car("Toyota");
console.log(myCar.make); // 可以访问
myCar.start(); // 可以调用

在这个例子中,make 属性和 start 方法都使用了默认的 public 修饰符。它们可以在类内外被访问和调用。

2. private 访问修饰符:
private 修饰符表示成员只能在类的内部访问,外部无法访问。

class BankAccount {
  private balance: number;

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

  getBalance() {
    return this.balance; // 可以在类内部访问
  }

  withdraw(amount: number) {
    if (amount <= this.balance) {
      this.balance -= amount; // 可以在类内部修改
    } else {
      console.log("Insufficient balance.");
    }
  }
}

const myAccount = new BankAccount(1000);
console.log(myAccount.getBalance()); // 可以访问
myAccount.withdraw(200); // 可以调用
// console.log(myAccount.balance); // 无法访问,会报错

在这个例子中,balance 属性被声明为 private,所以只能在类的内部访问和修改。外部无法直接访问 balance 属性。

3. protected 访问修饰符:
protected 修饰符表示成员可以在类的内部和继承的子类中访问,但是外部无法访问。

class Person {
  protected name: string;

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

  displayInfo() {
    console.log(`Name: ${this.name}`);
  }
}

class Employee extends Person {
  private employeeId: number;

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

  showEmployeeInfo() {
    console.log(`Employee ID: ${this.employeeId}`);
    this.displayInfo(); // 可以访问基类的 protected 方法
  }
}

const employee = new Employee("Alice", 123);
employee.showEmployeeInfo(); // 可以调用
// console.log(employee.name); // 无法访问,会报错

在这个例子中,Person 类中的 name 属性使用了 protected 修饰符,使得它可以在继承的子类中访问。Employee 类继承了 Person 类,并且可以访问 name 属性。

通过这些例子,你应该更清楚 publicprivateprotected 访问修饰符在类的成员访问中的作用和区别。不同的修饰符可以帮助你更好地管理类的可见性和封装性。

总结:通过类和继承,你可以创建有结构的对象,并在类之间共享和扩展功能。使用构造函数、成员函数和访问修饰符,你能更好地组织代码,并使其更具可读性和可维护性。继续练习和学习,你将掌握更多关于类和继承的高级特性。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值