浏览 76
扫码
在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 am ${this.age} years old.`);
}
}
let person = new Person("Alice", 30);
person.greet(); // 输出:Hello, my name is Alice and I am 30 years old.
在上面的例子中,定义了一个名为Person
的类,该类有两个属性name
和age
以及一个构造函数constructor
用来初始化这两个属性,还有一个方法greet
用于打招呼。
- 继承: Typescript支持类的继承,一个子类可以继承一个父类的属性和方法。
class Student extends Person {
studentId: number;
constructor(name: string, age: number, studentId: number) {
super(name, age);
this.studentId = studentId;
}
study() {
console.log(`${this.name} is studying.`);
}
}
let student = new Student("Bob", 25, 12345);
student.greet(); // 输出:Hello, my name is Bob and I am 25 years old.
student.study(); // 输出:Bob is studying.
在上面的例子中,定义了一个Student
类,继承自Person
类,子类通过super
关键字调用父类的构造函数来初始化父类的属性。
- 访问修饰符:
Typescript支持访问修饰符,用于控制类的成员的访问权限。常用的访问修饰符有
public
,private
和protected
。
-
public
:默认的访问修饰符,表示类的成员可以在类的内部和外部被访问。 -
private
:表示类的成员只能在类的内部被访问。 -
protected
:表示类的成员可以在类的内部和继承的子类中被访问。
class Car {
public brand: string;
private model: string;
protected year: number;
constructor(brand: string, model: string, year: number){
this.brand = brand;
this.model = model;
this.year = year;
}
displayCarInfo() {
console.log(`This is a ${this.year} ${this.brand} ${this.model}.`);
}
}
let car = new Car("Toyota", "Camry", 2020);
console.log(car.brand); // 输出:Toyota
console.log(car.model); // 错误:Property 'model' is private and only accessible within class 'Car'.
console.log(car.year); // 错误:Property 'year' is protected and only accessible within class 'Car' and its subclasses.
在上面的例子中,brand
是public
的,所以可以在外部访问;model
是private
的,只能在类的内部访问;year
是protected
的,可以在类的内部和子类中访问。
- 静态属性和方法: Typescript支持静态属性和方法,它们属于类本身而不是类的实例。
class MathUtil {
static PI: number = 3.14;
static calculateCircleArea(radius: number): number {
return this.PI * radius * radius;
}
}
console.log(MathUtil.PI); // 输出:3.14
console.log(MathUtil.calculateCircleArea(5)); // 输出:78.5
在上面的例子中,PI
是静态属性,可以直接通过类名访问;calculateCircleArea
是静态方法,也可以通过类名调用。