Skip to content

在 TypeScript 中,类(Class)是一种面向对象编程的构造,它提供了一种组织代码的方式,通过封装数据(属性)和功能(方法)来创建可重用的对象。类可以包含属性(成员变量)、方法(成员函数)、构造函数和访问修饰符等。

定义类

typescript
class Greeter {
    greeting: string;

    constructor(message: string) {
        this.greeting = message;
    }

    greet() {
        return "Hello, " + this.greeting;
    }
}

let greeter = new Greeter("world");
console.log(greeter.greet()); // 输出 "Hello, world"

访问修饰符

  • public:默认修饰符,属性或方法在任何地方都可以被访问。
  • private:属性或方法只能在类内部被访问。
  • protected:属性或方法可以在类内部和子类中被访问。
  • readonly:属性只能被初始化一次,然后就不能被修改了。
typescript
class Animal {
    private name: string;

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

    public move(distanceInMeters: number = 0) {
        console.log(`${this.name} moved ${distanceInMeters}m.`);
    }
}

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

    public move() {
        console.log("Slithering...");
        super.move(5); // 调用父类的move方法  
    }
}

let snake = new Snake("Dangerous Snake");
snake.move(); // 输出 "Slithering..." 和 "Dangerous Snake moved 5m."

抽象类

抽象类不能被实例化,它通常包含抽象方法,这些方法必须在任何子类中实现。

typescript
abstract class Animal {
    abstract makeSound(): void;

    move(): void {
        console.log("The animal moves.");
    }
}

class Dog extends Animal {
    makeSound(): void {
        console.log("The dog barks.");
    }
}

let d = new Dog();
d.move(); // 输出 "The animal moves."  
d.makeSound(); // 输出 "The dog barks."

静态成员

类可以包含静态成员,这些成员与类本身关联,而不是与类的任何实例关联。

typescript
class Grid {
    static origin = {x: 0, y: 0};

    calculateDistanceFromOrigin(point: { x: number, y: number }) {
        let dx = point.x - Grid.origin.x;
        let dy = point.y - Grid.origin.y;
        return Math.sqrt(dx * dx + dy * dy) / this.scale;
    }

    constructor(public scale: number) {
    }
}

let grid1 = new Grid(1.0);  // 1x scale  
let grid2 = new Grid(5.0);  // 5x scale  

console.log(grid1.calculateDistanceFromOrigin({x: 10, y: 10})); // 输出 14.142135623730951  
console.log(grid2.calculateDistanceFromOrigin({x: 10, y: 10})); // 输出 70.71067811865476

类的继承

类可以继承自其他类,继承允许你重用代码,并且添加或覆盖功能。

typescript
class Animal {
    name: string;

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

    move(): void {
        console.log(`${this.name} moves.`);
    }
}

class Snake extends Animal {
    constructor(name: string) {
        super(name);
    }

    move(): void {
        console.log("Slithering...");
    }

    eat(): void {
        console.log(`${this.name} eats a mouse.`);
    }
}

let s = new Snake("Dangerous Snake");
s.move(); // 输出 "Slithering..."  
s.eat(); // 输出 "Dangerous Snake eats a mouse."
编程洪同学服务平台是一个广泛收集编程相关内容和资源,旨在满足编程爱好者和专业开发人员的需求的网站。无论您是初学者还是经验丰富的开发者,都可以在这里找到有用的信息和资料,我们将助您提升编程技能和知识。
专业开发
高端定制
售后无忧
站内资源均为本站制作或收集于互联网等平台,如有侵权,请第一时间联系本站,敬请谅解!本站资源仅限于学习与参考,严禁用于各种非法活动,否则后果自行负责,本站概不承担!