十年经验告诉你,如何正确的理解接口

这篇也算是店动力——从0到1设计开发进销存系统的记录总结的前传吧,因为在这个系统中大量的使用了接口,所以有必须专门把接口说一下。

说起接口大家都不陌生,尤其对于C#、Java等开发人员来说。
“什么是接口”,“什么是抽象类”,“接口和抽象类的相同点及区别”,这些话题大概是面试题中出场率最高的了,面试的人多了,那自然答案也是各种各样的。
【十年经验告诉你,如何正确的理解接口】
再看下文之前,自己可以先想一想,用自己的语言、自己的工作经验,把它的本质说一下。
另外,大家也可以把自己的理解说一下,互相探讨一番。

我虽然可以一句话就把接口的理解说完,但显而易见的后果就是:字数太少,无法上到首页。
因为我也是从一个菜鸟经过这么多年的经验慢慢的摸索、理解出来的,基于我对这个行业的热爱,因此我真的想帮助更多的人快速的成长,也自然想这篇文章上首页,让更多的人看到。

社会是在不段进步的,同样编程语言也是在进步的。早期的c、c++都没有接口的概念,后面推出的java、c#摒弃了c++的多继承概念,提出了接口的概念。刚才说了编程语言也是在进步的,因此接口的出现必然要比多继承好。不是吗?

说回上面的问题,大部分人在回答什么是接口、或者接口和抽象类的相同点及区别时,无非是把接口、抽象类的书本中的定义说一下。
可作为面试官的我们想要的答案是你自己对于接口、抽象类的理解,不是书本上的定义。

接口的本质其实是对实现最小功能的定义或者说约束。怎么理解这句话?
假设你现在要和其它系统之间对接,这时候关心的应该是:需要提供哪些方法及参数的结构,这也就是所谓的面向接口编程。
另外一个就是把所有的功能一个接口中,还是放到不同的接口?答案就不用我说了,这个也就是所谓的接口隔离原则:多个专用接口优于一个单一的通用接口

这两点一定要细品:
想一想C#中的IEnmuerable接口,是不是只是提供了一个最基本功能的定义?
再想一想List实现的接口有哪些?为什么要实现这么多接口?ICollection IEnumerable IList ICollection IEnumerable IList?为了复用

换句话说:接口,它仅仅就是一个功能片段。
它可以像搭积木一样,把多个不同的接口组合在一起,变成一个包含完整功能的类。
另外,在拿到这个类之后,由于它实现了多个接口,那么这个类就可以应用于多个不同的场景了,即:复用。

接口,仅此而已。

    推荐阅读