chst365's blog chst365's blog
首页
  • Git
  • 网络
  • 操作系统
  • 浏览器
  • webpack
  • JavaScript
  • TypeScript
  • 性能
  • 工程化
  • React
  • 编程题
  • React技术揭秘
  • 算法
  • Node
  • 编码解码
  • NodeJS系列
  • Linux系列
  • JavaScript系列
  • HTTP系列
  • GIT系列
  • ES6系列
  • 设计模式系列
  • CSS系列
  • 小程序系列
  • 数据结构与算法系列
  • React系列
  • Vue3系列
  • Vue系列
  • TypeScript系列
  • Webpack系列
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

chst365

DIV工程师
首页
  • Git
  • 网络
  • 操作系统
  • 浏览器
  • webpack
  • JavaScript
  • TypeScript
  • 性能
  • 工程化
  • React
  • 编程题
  • React技术揭秘
  • 算法
  • Node
  • 编码解码
  • NodeJS系列
  • Linux系列
  • JavaScript系列
  • HTTP系列
  • GIT系列
  • ES6系列
  • 设计模式系列
  • CSS系列
  • 小程序系列
  • 数据结构与算法系列
  • React系列
  • Vue3系列
  • Vue系列
  • TypeScript系列
  • Webpack系列
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 浏览器

  • webpack

  • TypeScript

    • 一、类型基础
    • 二、数据类型
    • 三、接口
    • 四、类
      • 类的继承和成员修饰符
      • 抽象类与多态
    • 五、类与接口的关系
    • 六、泛型
    • 七、类型检查机制
    • 八、高级类型
    • 九、ES6与CommonJS的模块系统
    • 十、使用命名空间
    • 十一、声明合并
    • 十二、如何编写声明文件?
    • 十三、tsconfig配置
    • 十四、编译工具:从ts-loader到Bable
    • 十五、代码检查工具:从TSLint到ESLint
    • 十六、单元测试
    • 十七、TS在react中的使用
    • 什么是TypeScript?
  • 性能

  • 工程化

  • React

  • JavaScript

  • 编程题

  • React技术揭秘

  • 算法

  • 前端
  • TypeScript
chst365
2020-03-22
目录

四、类

# 四、类

# 类的继承和成员修饰符

/**
 * 修饰符
 * 公共:public
 * 私有化:private
 * 被保护:protected
 * 只读:readonly
 * 静态:static
 */
class Dog {
    constructor(name: string) {
        this.name = name
    }
    // 公共
    public name: string
    run() {}
    // 私有化
    private pri() {}
    // 被保护: 被保护的类,不能被声明实例化,只能被继承
    protected pro() {}
    // 只读: 只能读取,不能被修改,只读属性初始化的时候一定有默认值
    readonly legs: number = 4
    // 静态:类的静态成员,只能通过类名来调用,而不能通过子代调用,类的静态成员也可以被继承
    static food: string = 'bones'
}
console.log(Dog.prototype)
let dog = new Dog('wangwang')
console.log(dog)
console.log(Dog.food)
// console.log(dog.foot)
// dog.pri()
// dog.pri()
// 内部属性只在实例上,不在原型上
// 与es不同,实例属性必选有初始值,或者在构造函数中被初始化
// 除了类的成员可以添加修饰符外,构造函数的参数也可以添加修饰符,作用是将参数自动变为实例属性,可以省略函数内部的定义

class Husky extends Dog {
    constructor (name: string, public color: string) {
        super(name)
        this.color = color;
        // this.pri()
        this.pro()
    }
    // color: string
}
console.log(Husky.food)

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

# 抽象类与多态

/** 
 * 抽象类与多态
 * 抽象类(abstract): 抽象类无法实例化,只能被继承
 * 抽象方法:在抽象类中,定义一个方法,不具体实现。好处是在父类声明,子类实现
 * 抽象类的好处:抽离出一些事物的共性,有利于代码的复用与扩展,抽象类也可以实现多态
 * 
 * 多态:在父类声明抽象方法,在多个子类不同的实现。
 * 在程序运行时,会根据不同的对象,对应不同的方法,执行不同的操作,这样就实现运行时的绑定
 * 
*/
abstract class Animal {
    eat() {
        console.log('eat')
    }
    // 抽象方法
    abstract sleep(): void
}
class Cat extends Animal {
    constructor(name: string) {
        super()
        this.name = name
    }
    name: string
    run() {}
    sleep() {
        console.log('cat sleep')
    }
}
// 抽象类无法实例化,只能被继承
// let animal = new Animal()
let cat = new Cat('miao')
cat.eat();

class Tiger extends Animal {
    sleep() {
        console.log('tiger sleep')
    }
}
let tiger = new Tiger();
let animals: Animal[] = [cat, tiger]
animals.forEach(i => {
    i.sleep()
})
// this类型的作用
class WorkFlow {
    step1() {
        return this;
    }
    step2() {
        return this;
    }
}
// this 方法的链式调用
new WorkFlow().step1().step2()

class Myflow extends WorkFlow {
    next() {
        return this;
    }
}
// 这样就可以保持父类与子类接口调用的连贯性
new Myflow().next().step1().next().step2()
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
#语言#TypeScript
上次更新: 2021/04/22, 00:08:06
三、接口
五、类与接口的关系

← 三、接口 五、类与接口的关系→

最近更新
01
面试官
03-27
02
this&指针&作用域&闭包
03-27
03
前端
03-27
更多文章>
Theme by Vdoing | Copyright © 2019-2025 chst365 | 豫ICP备17031889号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式