请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于接口继承类的疑问

老师您好,买这个课程较晚,不知道还有人看问题没:
关于您这章所讲的4个点中的最后一个(接口继承类),我有个疑问,ts这么设计这个功能意欲何为呢,毕竟这种接口对类继承从不论是在java、c++还是dart、kotlin这些语言中都没有见过。对此,我有如下猜测,ts中接口继承类这种做法,是否有提高代码语法层面约束能力之意(相较于其他语言接口(虚类)还有一定类的影子来说,ts的接口感觉更加纯粹的规则化)。比如,我要实现这个接口的类就必须继承某个父类以保证关键属性乃至关键方法__实现__的拥有(虽然接口中可以声明属性(但无法保证可见性,很多语言将此属性静态化),而方法在接口中无法实现(其他语言因为依赖关系是无法提供精准对象(实例)级的实现)),但如此说的话就有个问题,接口在一定程度上和类本就不互通,他两的属性方法互不干扰,那如此费力来约束意义就更加不明白了。另外,如果说接口有这样的约束的话,但是为何在下面这段代码上没有约束呢?

let ab = {} as SelectableControl;
ab.select = function () {
      this.state = 's';
    console.log(this);
};
ab.select();

按理state是私有的,或者是未定义的,但在这却能正常使用。
以上便是问题,有理解不对的请指正。

正在回答

1回答

官方给的场景是:当你有一个庞大的继承结构时这很有用,通常没有这么复杂的场景的话可能是用不到接口继承类。感觉是一种组合关系,类提供成员,接口定义方法,但是又提供了一定的约束(不是什么类都可以继承这个接口,只能是接口继承类的子类才可以实现这个接口)。

0 回复 有任何疑惑可以回复我~
  • 提问者 银狐tjfox #1
    非常感谢!这个场景十分到位!
    回复 有任何疑惑可以回复我~ 2019-09-29 14:28:16
  • (不是什么类都可以继承这个接口,只能是接口继承类的子类才可以实现这个接口)。
    
    老师:是不是写错了这句话:(不是什么类都可以继承这个接口,只能是接口继承类的子类才可以实现这个接口)。
    
    正确:(不是什么类都可以实现这个接口,只能是接口继承类的子类才可以实现这个接口)。
    回复 有任何疑惑可以回复我~ 2024-01-10 16:32:54
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信