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

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

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

    
     4
  • Sixty
    2019-12-17
    老师,我怎么觉得抽象类和接口有点类似啊,我可以用接口来一定一种类的类型,我也可以用抽象类来定义一种类的内部结构。怎么来理解他们以及什么时候使用接口什么时候使用抽象类呢。

    作者回复: 首先,在抽象类中可以包含方法的实现,也可以只声明不实现;而在接口中只能声明方法,不包含实现。
    另外,抽象类侧重类别的抽象(定义这个对象是什么,比如:人类可以是男人的抽象类),而接口侧重功能的抽象(定义这个对象能做什么,比如:人可以吃喝跑跳)。

    
     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}

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

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

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

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

     1
     1
  • 雨桥明夜
    2020-02-11
    class Control {
        private state: any;
    }

    interface SelectableControl extends Control {
        select(): void;
    }

    class Button extends Control implements SelectableControl {
        select() { }
    }

    http://www.typescriptlang.org/docs/handbook/interfaces.html
    页面拉到最下面,有这样一句话 “Within the Control class it is possible to access the state private member through an instance of SelectableControl. ”说在 Control 类内部,是允许通过 SelectableControl 的实例来访问私有成员 state 的。
    但是 SelectableControl 是个接口,SelectableControl 的实例是指 Control 类的子类实例吗,但是私有属性应该只有 Control 实例才能访问的,那句话应该怎么理解
    展开
    
    
  • 何用
    2019-07-26
    最后那张图,中间的箭头标错了吧?

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

    
    
我们在线,来聊聊吧