# 类 class
# 基础栗子和继承
// 基础栗子
class Hello {
hello: string
constructor(msg: string) {
this.hello = msg
}
sayHi() {
return this.hello + ' you'
}
}
const ins1 = new Hello('hi')
const res1 = ins1.sayHi()
console.log(res1);
// 继承
class Animal {
move(who: string) {
console.log(`${who} move!`);
}
}
class Dog extends Animal {
eat() {
console.log('dog eat');
}
}
const dog1 = new Dog()
dog1.eat()
dog1.move('gogo')
console.log('------');
// 包含构造函数的派生类
/**
* 1. 派生类包含构造函数 constructor 必须调用 super() ,而且在构造函数使用this之前必须调用 super()
* 2. 派生类重写基类的方法,会覆盖基类的方法
*/
class Animal2 {
name: string
constructor(str: string) {
this.name = str
}
move(long: number) {
console.log(long + 'm' + ' from Animal2; name: ' + this.name);
}
}
class Dog2 extends Animal2 {
constructor(name: string) {
super(name)
}
move() {
console.log('dog2 move');
super.move(23)
}
}
const dog2 = new Dog2('benben')
dog2.move()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 公共 私有 受保护 的修饰符
public 默认值
private 不能在声明类的外部访问
protected 不能在声明类的外部访问,可以在派生类中访问
# 抽象类
/**
* 1 抽象类作为派生类的基类使用
* 2 一般不会被直接实例化
* 3 不同于接口,可以包含成员的实现细节
* 4 抽象类中的抽象方法不包含具体实现,但必须在派生类中实现
* 5 抽象方法必须包含 abstract 关键字,可以包含访问修饰符(private protected)
*/
abstract class Department {
constructor(public name: string) {
this.name = name
}
sayHi() {
console.log('hi you.')
}
// 必须在派生类中实现
abstract getName(): string;
}
class Ant extends Department {
constructor() {
super('ant')
}
getName(): string {
return this.name
}
getSth(): string {
return 'something'
}
}
// company: Department 对抽象类型的引用
const company: Department = new Ant() // 抽象子类实例化
const cName = company.getName()
console.log(cName); // ant
// const sth = company.getSth() // 类型“Department”上不存在属性“getSth”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42