作者回复: 举个例子:一个UI类库定义了一个Button类并提供了ButtonInterface接口。现在你想实现一个自己的Button类,添加些自定义属性,那么只能是Button的子类去实现ButtonInterface接口,其他的类不能实现这个接口,即使与Button具有相同的成员。
这种接口的存在,对子类起到了约束作用,保证了继承关系。
作者回复: 关键在怎么理解“AutoInterface 继承了 Auto 后,也包括了其中的私有和受保护成员”。注意,这么做的目的是限定接口的使用范围,并不会真正为这个接口添加类的私有和受保护属性(实际上接口也没有这种类型的属性),而这个限定范围就是:只能由子类来实现这个接口。
作者回复: 这个意思是对的,但不存在应该不应该的问题,要看具体的目的是什么。(另外,接口是被类实现的,而不是实现类)
作者回复: 可以这样理解:
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}
作者回复: 你可能是按照书写代码的顺序理解箭头的。
PPT中间的剪头表示接口可以由类来实现,类可以由接口来继承,理解这个就行了。