第4章 类
类的定义
ts
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
修饰符
public
- 默认情况下属性是 public (公开的),即可以在类的内部与外部修改和访问
- 不明确设置修饰符即为public
ts
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
const lbviic = new Person('lbviic', 18);
lbviic.name; // 可以在外部访问
protected
- protected 修饰符指受保护的,只允许在父类与子类使用,不允许在类的外部使用
ts
class Person {
protected name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
const lbviic = new Person('lbviic', 18);
lbviic.name; // 无法访问
private
- private 修饰符指私有的,不允许在子类与类的外部使用
- 父类声明 private 属性或方法子类不允许覆盖
ts
class Person {
private name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
const lbviic = new Person('lbviic', 18);
lbviic.name; // 无法访问
readonly
- readonly 将属性定义为只读,不允许在类的内部与外部进行修改
ts
class Person {
readonly name: string;
age: number;
// 在构造函数初始化时,可以修改
constructor(name: string = 'lbviic', age: number) {
this.name = name;
this.age = age;
}
}
static
- static 用于定义静态属性或方法,属性或方法是属于构造函数的
ts
// 通过 static 来实现单例模式
class Person {
static instance: Person | null = null;
protected constructor() {}
static create(): Person {
// 若已经创建,则不再创建
if (this.instance == null) {
this.instance = new Person();
}
return this.instance;
}
}
const lbviic = new Person(); // 构造函数为 protected 无法直接实例化
const lbviic = Person.create(); //通过调用 create 方法实例化对象
get/set
- 可以通过 get/set 来获取设置为 private 的值
ts
class Person {
private _name: string;
age: number;
constructor(name: string, age: number) {
this._name = name;
this.age = age;
}
get name() {
return this._name;
}
set name(name: string) {
this._name = name;
}
}
const lbviic = new Person('lbviic', 18);
lbviic.name; // 通过 get name() 获取到 _name的值
lbviic.name = 'zhichao'; // 通过 set name() 修改 _name的值
abstract
- 抽象类定义使用abstract 关键字,抽象类除了具有普通类的功能外,还可以定义抽象方法
- 抽象类可以不包含抽象方法,但抽象方法必须存在于抽象类中
- 抽象方法是对方法的定义,子类必须实现这个方法
- 抽象类不可以直接使用,只能被继承
- 抽象类类似于类的模板,实现规范的代码定义
ts
abstract class Animal {
abstract run(): void
}
class Dog extends Animal {
// 必须实现 run 方法
run() {
console.log("狗在跑");
}
}
预览: