TS — 类(详解)

在 TypeScript 中,类是面向对象编程的基本概念之一,它允许你使用面向对象的方式组织和管理代码。

1. 类的基本定义

在 TypeScript 中,类通过 class 关键字来定义。

class Person {
    name: string;
    age: number;

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

    greet() {
        console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
    }
}
//定义了一个 Person 类,它有 nameage 两个属性,以及一个 greet 方法。

2. 类的实例化

要创建类的实例,可以使用 new 关键字。

let person1 = new Person("Alice", 30);
person1.greet(); // 输出: Hello, my name is Alice and I'm 30 years old.

3. 构造函数

类可以有一个特殊的方法叫做构造函数(constructor),它会在实例化类时被调用。

class Person {
    constructor(public name: string, public age: number) {
        // constructor 可以直接定义属性
    }
}

//我们使用了 TypeScript 的简化语法,将属性的声明和赋值合并到了构造函数的参数列表中。

4. 访问修饰符

TypeScript 支持公共、私有和受保护等访问修饰符来控制类成员的可访问性。

  • public:默认修饰符,可以在类的内部和外部访问。
  • private:只能在类的内部访问。
  • protected:可以在类的内部和派生类中访问。
class Person {
    private id: number; // 私有属性

    constructor(public name: string, private age: number) {
        this.id = Math.random(); // 只能在类的内部访问
    }
}

5. 继承

类可以通过 extends 关键字实现继承。

class Student extends Person {
    constructor(name: string, age: number, public grade: string) {
        super(name, age); // 调用父类的构造函数
    }

    study() {
        console.log(`${this.name} is studying in grade ${this.grade}.`);
    }
}

//Student 类继承了 Person 类,使用 super 关键字调用了父类的构造函数。

6. 方法重写

子类可以重写父类中的方法。

class Student extends Person {
    greet() {
        console.log(`Hello, my name is ${this.name}, I'm ${this.age} years old, and I'm a student.`);
    }
}

//Student 类重写了 Person 类中的 greet 方法。

7. 抽象类

抽象类是不能被实例化的类,通常用作其他类的基类。

abstract class Animal {
    abstract makeSound(): void; // 抽象方法,子类必须实现
}

8. 静态属性和方法

类中的静态属性和方法属于类本身,而不是类的实例。

class MathUtil {
    static PI: number = 3.14;

    static circleArea(radius: number): number {
        return this.PI * radius * radius;
    }
}

 

posted on 2024-04-15 16:17  萬事順意  阅读(60)  评论(0编辑  收藏  举报