下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 12 | 类与接口的关系
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

TypeScript开发实战

共47讲 · 约450分钟
2974
免费
01 | 重塑“类型思维”
免费
02 | 类型基础(1):强类型与...
免费
03 | 类型基础(2):动态类型...
免费
04 | 编写你的第一个TypeScrip...
免费
05 | 基本类型
06 | 枚举类型
07 | 接口(1):对象类型接口
08 | 接口(2):函数类型接口
09 | 函数相关知识点梳理
10 | 类(1):继承和成员修饰...
11 | 类(2):抽象类与多态
12 | 类与接口的关系
13 | 泛型(1):泛型函数与泛...
14 | 泛型(2):泛型类与泛型...
15 | 类型检查机制(1):类型...
16 | 类型检查机制(2):类型...
17 | 类型检查机制(3):类型...
18 | 高级类型(1):交叉类型...
19 | 高级类型(2):索引类型
20 | 高级类型(3):映射类型
21 | 高级类型(4):条件类型
22 | ES6与CommonJS的模块系统
23 | 使用命名空间
24 | 理解声明合并
25 | 如何编写声明文件
26 | 配置tsconfig.json(1)...
27 | 配置tsconfig.json(2)...
28 | 配置tsconfig.json(3)...
29 | 编译工具:从ts-loader到...
30 | 代码检查工具:从TSLint到...
31 | 使用Jest进行单元测试
32 | 创建项目
33 | 组件与类型(1):函数组...
34 | 组件与类型(2):高阶组...
35 | 事件处理与数据请求
36 | 列表渲染与路由
37 | Redux与类型
38 | 搭建服务端开发环境
39 | 列表的CRUD
40 | 导出Excel
41 | 搭建Vue开发环境
42 | 组件封装
43 | 组件发布
44 | 共存策略
45 | 宽松策略
46 | 严格策略
47 | 结束语
本节摘要

精选留言(5)

  • 2019-07-28
    现在有这么一个问题,继承有私有属性和保护属性的类的接口用在什么地方呢?
    首先根据课程中描述的这个接口不仅抽象了类的公共属性还抽象了其私有属性和受保护属性。
    根据课程代码显示,这个接口只能在定义这个类的子类的时候才能使用。到目前为止的理解,定义子类继承父类的时候加不加这个接口好像都没啥影响,或者加不加有什么不同吗?这个继承有私有属性和保护属性的类的接口还能用在什么地方呢?

    作者回复: 举个例子:一个UI类库定义了一个Button类并提供了ButtonInterface接口。现在你想实现一个自己的Button类,添加些自定义属性,那么只能是Button的子类去实现ButtonInterface接口,其他的类不能实现这个接口,即使与Button具有相同的成员。

    这种接口的存在,对子类起到了约束作用,保证了继承关系。

    3
  • 2019-08-27
    老师,父类的private属性不能被子类继承?为什么Class Bus extends Auto Implements AutoInterface不报错呢?

    作者回复: 关键在怎么理解“AutoInterface 继承了 Auto 后,也包括了其中的私有和受保护成员”。注意,这么做的目的是限定接口的使用范围,并不会真正为这个接口添加类的私有和受保护属性(实际上接口也没有这种类型的属性),而这个限定范围就是:只能由子类来实现这个接口。

    1
  • 2019-07-25
    所以接口继承类时,不应该继承带有私有属性和受保护成员的类,否则这个接口就不能实现除了 这个类的子类 外,别的类了,是这个意思吗?

    作者回复: 这个意思是对的,但不存在应该不应该的问题,要看具体的目的是什么。(另外,接口是被类实现的,而不是实现类)

    1
    1
  • 2019-09-04
    class Auto{
        state = 1;
        private state2 = 0;
        protected state3 = 3;
    }
    interface AutoInterface extends Auto{}
    class Bus extends Auto implements AutoInterface{
        showMsg(){
            // console.log(this.state2); // 不能访问来自接口的私有属性
            console.log(this.state3); // 可以访问来自接口的被保护属性
        }
    }
    let bus = new Bus();
    bus.showMsg();
    console.log(bus); // 输出可以看到state2属性和state3属性
    视频中说,接口可以抽离Auto类中的私有属性,但是Bus类却无法访问到,怎么解释呢?
    展开

    作者回复: 可以这样理解:
    Bus也具有Auto的私有属性,但在子类中访问父类的私有属性,显然是不能通过语法检查的,所以会报错。
    所以只能在Bus的实例上体现,只不过这个例子不能修改这个属性。

    看下面的例子,理解一下:
    class Auto {
        private length: number;
        constructor(length: number) {
            this.length = length;
        }
    }

    interface AutoInterface extends Auto {}

    class Bus extends Auto implements AutoInterface {}

    let bus = new Bus(10);
    console.log(bus); // Bus {length: 10}

  • 2019-07-26
    最后那张图,中间的箭头标错了吧?

    作者回复: 你可能是按照书写代码的顺序理解箭头的。
    PPT中间的剪头表示接口可以由类来实现,类可以由接口来继承,理解这个就行了。