1. 定义类
class Person {
name: string; // 属性
// 构造函数, 实例化类的时候触发
constructor(name: string) {
this.name = name;
}
// 普通函数
run(): void {
console.log(this.name);
}
}
var person: Person = new Person('Tom');
person.run();
2. 继承 (extends, super)
class Student extends Person {
constructor(name: string) {
super(name);
}
study(): void {
console.log(`${this.name}在学习`);
}
}
var student: Student = new Student('Tom');
student.run();
student.study();
注: 如果父类子类中有同样的方法, 则调用的是子类的方法
3. 类中属性的修饰符
public: 公有, 在类中, 子类和类外部都可以访问
protected: 保护, 在类中和子类中可以访问, 在类外部不能访问
private: 只能在类中访问, 子类和类的外部都不能访问
注: 属性如果不加修饰符, 默认为public
4. 静态属性/静态方法
class Person {
// 静态属性
static str: string = 'aaa';
// 静态方法
static run() {
// ...
}
}
注: 静态方法中不能直接调用类里面的非静态属性
5. 多态
父类定义一个方法不去实现, 让继承它的子类去实现, 每一个子类有不同的表现
6. 抽象类
它是提供其他类继承的基类, 不能直接被实例化
用abstract关键字定义抽象类和抽象方法
抽象类中的抽象方法不包含具体实现并且必须在派生类中实现
抽象方法只能写在抽象类中
abstract class Animal {
abstract eat(): void;
}
class Dog extends Animal {
eat(): void {
// 抽象类的子类必须实现父类的抽象方法
}
}