黑马程序员技术交流社区

标题: 默默地问一句对于接口的疑惑 [打印本页]

作者: 821728010    时间: 2013-5-25 18:48
标题: 默默地问一句对于接口的疑惑
本帖最后由 821728010 于 2013-5-29 17:23 编辑

         接口不能创建对象,也不能继承,接口只有一个功能就是被实现!可是实现接口的时候,接口中的方法还的自己重新定义,我不实现接口同样可以定义那些方法!那么接口存在的意义是什么呢?
作者: 赵利斌    时间: 2013-5-25 19:21
接口可以多实现啊   就这点来说就可以让一个类具有了很高的扩展性,同时接口也可以多继承的呀这个不是能节省很多的代码量啊
作者: 神之梦    时间: 2013-5-25 19:41
楼主仔细想想毕老师讲的电脑主板与网卡的例子应该可以明白接口的部分意义了。
作者: 胡浩    时间: 2013-5-25 20:15
借口表示一种能力,也是表示一种约束。当你定义了一个接口后,任何类继承了这个接口后,都必须实现接口中定义的方法,这就是约束;而实现了接口后,这个能也就具有了接口中的定义的方法,也就有了某种能力。java编程其实是面向接口的。使用接口可以实现功能的扩展,并且可以实现每个类只做它要做的事,减少类与类之间的耦合性。
作者: 穆爱明    时间: 2013-5-25 20:24
首先,接口不能实例化。但接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。
其次,接口的的意义在于:接口体现了约定和实现相分离的原则,通过面向接口编程,可以降低代码的耦合性,提高代码的可扩展性和可维护性。面向接口编程就意味着:开发系统时,主体架构使用接口,接口构成系统的骨架,这样就可以通过更换实现接口的类来实现更换系统。
作者: Changer_s    时间: 2013-5-25 20:27
我帮你理解一下接口
接口很好理解
打个比方:我们电脑的usb接口,你可以插u盘,插电风扇,可以插手机实现相应的功能
为什么会出现这种现象,在于接口里面定义了仅仅只告诉你:我这里有插usb电器的功能,也就是你可以插带有usb的电器,实现相对应的功能
如果接口能实例化,那么必然他的方法也就是一成不变的,那么插带有usb的东西,只能实现一种功能,对吧?
所以接口不能实例化!!!
它存在是有意义的,你说每一个usb电器都实例化一下那是多么麻烦呀(也就是你插上面电器就有对应的usb插孔,那要多少个插孔呀???)
现在用一个  接口   就可以插多个电器,实现各种电器本身的方法,不就简化了吗?
嘿嘿,我想你现在应该理解了吧???
作者: Neverbelazy    时间: 2013-5-27 09:50
本帖最后由 Neverbelazy 于 2013-5-27 09:53 编辑

1. 不能单单从程序编写的角度考虑接口的存在的意义, 正如题主所说, 从代码编(复写vs新建)写来看似乎没有必要
2. 但是跳出写代码本身而言, 接口的意义十分重大
3. 接口提供了一种约定, 任何程序设计者认为的, 应该遵循这种约定的类都应该实现这个接口
    3.1 接口中只定义abstract的方法反而减少了歧义,或麻烦 因为实现一个约定可以有千万种不同的方法, 假设你可以在接口中写方法体, 但是实现类不合适, 不还是要重写?或者说, 实现了,但是使用者忘记重写了, 但是还不适用, 那不更悲剧了(考虑存入TreeSet的元素需要实现comparable接口的例子)
    3.2 所以,接口这就相当于告诉提供了一个标签, 使用者就可以知晓, 哦 原来这个类需要遵循这个约定来实现这个约定下可以使用的一些功能
4. 另外, 接口可以曲线的实现多“继承”, 而abstract的方法也是可以实现多继承的重要原因, 就是因为多实现的类一定需要复写, 才避免了多个父接口有同名方式时不知道该用哪个“父接口"中的方法这个问题。
作者: xiewen    时间: 2013-5-27 19:32
你第一句话就错了,接口可以继承,就是接口可以继承接口。对于对接口的理解,前面几位同学回答的很好了。
                      黑马云青年为您解答
作者: 紫衣侯    时间: 2013-5-27 21:47
归根结底是面向对象的思想,接口就是一大抽象类
作者: funneies    时间: 2013-5-28 01:28
接口的最主要的作用是达到统一访问,就是在创建对象的时候用接口创建,
【接口名】 【对象名】 = new 【实现接口的类】;
这样你想用那个类的对象就可以new哪个对象了,不需要改动原来的代码,就像USB接口一样,插什么读什么,更加方便。
接口主要针对多个类实现它来说的,要是只有一个类当然可以不用接口。例如,我做一个USB接口,有个read()抽象方法,然后用MP3类、U盘类,
移动硬盘类来实现,这样我用的时候用 USB usb = new 【类名】; a.read(); 这样我类名里写U盘,就读U盘,写MP3,就读MP3,而且类名可以
从属性文件里读,你写那个就用那个了。
作者: 袁梦希    时间: 2013-5-29 17:00
如果问题已经解决,请把帖子的类型改为已经解决,如果不会解决请看我的个性签名。
作者: 袁梦希    时间: 2013-5-29 17:00
如果问题已经解决,请把帖子的类型改为已经解决,如果不会解决请看我的个性签名。
作者: 821728010    时间: 2013-5-29 17:40
袁梦希 发表于 2013-5-29 17:00
如果问题已经解决,请把帖子的类型改为已经解决,如果不会解决请看我的个性签名。 ...

我发的贴的该改的全改好了,谢谢袁帮主提醒。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2