接口写出来的作用

接口写出来的作用

老师 请问为什么要写这个接口呢?直接写实现不行么?为什么要多一部继承呢? service的实现类能直接new dao的实现类 那要接口干啥啊? 还有为什么不是通过接口来传递数据呢? 接口不就是打开一个传输通道么?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕阿莹 2020-01-03 20:21:06

同学你好, 以下老师写的有点多,还请同学耐心读一下。

同学是否是疑惑,为什么要这样写?

http://img1.sycdn.imooc.com//climg/5e0f2dd40969d72506710131.jpg

而不是这样写是吗?:

http://img1.sycdn.imooc.com//climg/5e0f2dfc09cc3b6807080117.jpg

同学其实可以想一下,在实际开发中,我们总说,对外暴露接口,而不是对外暴露具体的实现类。

我们的目的是,让用户通过接口去调用方法就好了,他不用管我们如何去实现。

上边的这种写法,就是给了用户一个接口,你无需关心我这个实现类Impl 里是怎么实现的,我告诉你,你调用这个findAll方法,能获得这个所有的Category 就行。

我这会儿可能写了一个CategoryServiceImpl (); 去实现。明天,我又想出一个方案来,我写了个CategoryServiceImpl01 (); 这个时候,我直接把接口的实现类换成CategoryServiceImpl01 ()就可以了。学生还是用categoryService去调用方法,无需理会我是否把实现类给改了。

http://img1.sycdn.imooc.com//climg/5e0f2f47091fbc3508100308.jpg

而此时,同学可能会说,我直接不改变量名,改成下图这样不就行啦?:

http://img1.sycdn.imooc.com//climg/5e0f2fc8092b97b008230144.jpg

但是,这个实现类你并没有实现接口,你可以随意写,万一你把某个方法名字改了呢?这样就有可能报错了。

再举个例子:

如果你在盖一个房子,你找了一个包工头。你和他说,我不管你找谁,我就要一个什么什么样的房子。包工头(接口)就去给你找人来盖了。可能是张三(实现类),可能是李四(实现类);

这样你就面向的是包工头这个接口就好了。

而如果你是只有实现类,那就得你自己找了张三,你对接的是张三。你调用方法的时候,你还得关心他会啥,它会不会干泥瓦匠的活儿呀,他会不会贴瓷砖啊。等等,如果中途你发现不行,你还得再找李四。那李四有没有之前张三哪些个技能啊,你都得关心。

所有,我们要用接口去调用方法。如果非要用实现类,也是可以完成的。

因为,这里设计的项目没有那么复杂,所以看不出来,如果一定项目变的庞大,那么接口的优势就体现出来了,你就关心接口有什么方法,能返回什么数据就可以了。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 kevin唯心 #1
    算了,压根就解决不了我的疑问。 解释的乱七八糟的。
    2020-01-04 14:36:11
  • 好帮手慕阿莹 回复 提问者 kevin唯心 #2
    同学你好,非常抱歉没让同学理解清楚,因为目前的项目比较小,确实看不出太多的优势,如果涉及到多人的合作,接口就显得尤为重要了,这里建议同学先培养这个习惯。如果同学想到更好的比喻,也可以给同学们分享一下哦。
    2020-01-04 16:32:10
好帮手慕柯南 2020-01-02 10:57:40

同学你好!

1. 这是面向接口编程的体现,也是现在开发中经常使用的,比单独使用类有很多好处。比如:你定义了一个类,某一天发现这个类需要扩展新功能,但是其他地方还使用它,这样修改维护就很麻烦了。但是,如果使用接口,那么只需要在接口中添加功能,比如写一个方法,然后再重新写一个接口的实现类就可以了。调用的时候,接口的引用就指向了新完成的实现类。

2. 接口化的编程为的就是将实现封装起来,然而调用者只关心接口不关心实现,也就是“高内聚,低耦合”的思想;这样做的目的可以降低维护成本,且方便以后扩展,随着你代码量的增加,对编程的更多接触就可以对这些内容有了更深层次的认识了。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~


  • 提问者 kevin唯心 #1
    不啊老师,我是说直接删除掉接口方法的那个类,后面的实现还是那样写,集中到一个类中有多个方法,就比如dao是接口daoimp是实现,只是删除dao不删daoimp,静态的不是能直接使用类名来点方法名来使用么?或者new 应该也能调用吧?这样不是也能实现高内聚低耦合么? 维护的时候好维护啊,改方法里就行了。 我不太理解老师你解释的, 我只想知道不用接口也能调用实现为什么还要用接口,如果说后面课程有提及到,你放心的和我说 因为我后面的课程已经买了 只是还没激活而已。
    2020-01-03 13:18:34
  • 提问者 kevin唯心 #2
    我定义了一个类,类里面有很多方法和视频中这样 写个接口类在写个实现类(也是里面有很多方法) 区别呢? new也都能调用 或者直接写成静态类不就可以了么?我只是想删掉接口类 单独这个实现类是不是能用或者直接就不叫实现类了因为他没接口了呀,叫逻辑层?
    2020-01-03 13:20:48
  • 提问者 kevin唯心 #3
    老师你说接口是引用指向实现类的,可是你new的时候是new 的实现类啊,只是用了接口类型而已。
    2020-01-03 13:22:07
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师