1.认识类
(1) public: 类的外部和内部、继承类均可访问
(2) protected: 类的内部、继承类均可访问
(3) private: 类内部可访问(一般get set提供外部访问)
class Animal {
name: string; // 默认public
private _age: number;
protected nickName: string = 'annimal';
constructor(name: string) {
this.name = name;
}
get age() : number {
return this._age
}
set age(age : number) {
this._age = age;
}
}
let animal = new Animal('Animal');
let fullName = animal.name
// 无权限访问
// let age = animal.age
// let nickname = animal.nickName
2.类继承
(1) extends:继承关键字
(2) 子类继承了父类的公共和保护的属性和方法
(3) super: 执行基类的构造函数, 位置: 子类构造函数的第一行
class Dog extends Animal{
constructor(name: string, nickName: string) {
super(name);
this.nickName = nickName
}
public fullName (): string {
return `${this.name}: ${this.nickName}`;
}
}
let dog = new Dog('Dog', '狗狗...');
// 父类提供了get set此处可以直接操作
dog.age = 20;
console.log(dog.name + ':' + dog.age + '-' + dog.fullName())
3.类静态属性
(1) static:类静态属性关键字(可以类名直接访问)
class Cat extends Animal{
static voice: string = 'miao....';
constructor(name: string) {
super(name)
}
}
let voice = Cat.voice
console.log(voice)
4.抽象类
(1) abstract: 抽象类关键字
(2) abstract抽象方法必须在派生类实现
abstract class Department {
// name: string;
// constructor(name: string) {
// this.name = name
// };
constructor(public name: string) {};
printName(): void {
console.log('Department name: ' + this.name);
}
// 抽象方法必须包含 abstract关键字,且必须在派生类实现
abstract printMeeting(): void;
}
class AccountingDepartment extends Department {
constructor() {
super('Accounting and Auditing'); // 在派生类的构造函数中必须调用 super()
}
printMeeting(): void {
console.log('The Accounting Department meets each Monday at 10am.');
}
generateReports(): void {
console.log('Generating accounting reports...');
}
}
// let department: Department; // 允许创建一个对抽象类型的引用
// department = new Department(); // 错误: 不能创建一个抽象类的实例
let department = new AccountingDepartment(); // 允许对一个抽象子类进行实例化和赋值
department.printName();
department.printMeeting();
department.generateReports();