随笔 - 156  文章 - 0  评论 - 3  阅读 - 10万

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   萬事順意  阅读(499)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示