日期:2014-05-20  浏览次数:20771 次

JAVA接口问题
我想知道:设计接口的初衷是什么?  
                  使用接口有哪些好处?  
                  接口存在的意义何在?  
书上的解释不够详细,谁能给我一通俗详细的解释吗??
谢谢!!大侠们

------解决方案--------------------
看看设计模式上面关于接口的内容吧
------解决方案--------------------
去看 java 编程思想 关于接口的章节,最好把多态多也看了.应该有些帮助.
------解决方案--------------------
接口为什么存在呢?
一个众所周知的理由就是为了实现多重继承,这是C++里面的一个概念。由于每个类都有一个具体实现,多重继承会使你背上很沉重的包袱,也正是这个原因,java拒绝类的多重继承。然而这个概念其实是必要的,生活中也经常会出现x既是A又是B的现象,所以java利用接口来实现这种情况,因为接口没有任何具体实现,所以就没有任何与接口相关的存储,这里就避免了C++里出现的负担太重的问题。这个理由也可以描述为:为了能够使一个对象向上转型为多个基类型。
还有第二个理由,这与抽象类是一致的,就是防止客户端程序员创建该类的对象。正因如此,我们就要明确一下,什么时候该用接口,什么时候该用抽象类。可以说接口既有接口的好处,又有抽象类的好处,那么如果我们要创建不带任何方法定义和成员变量(ps:接口可以定义数据成员,但默认是static final类型的,即他是一个常量)的基类,那就选择接口。事实上,当我们在创建基类的时候,首先应该想到是否可以让他是一个接口,只有在你必须要有方法定义或成员变量这样的限制的时候,才应该选择抽象类,或者更进一步,使其成为一个具体类。
------解决方案--------------------
我支持先练习 多写程序 不支持把另一个层次的东西死记硬备 很浪费时间
当你到那个层次了当然就会理解接口的好处 没必要把所有的概念都弄明白了再练习
------解决方案--------------------
边学边用
------解决方案--------------------
我开始也是搞不清楚接口的问题,
老师说接口用来提高代码重用性,实现多继承。

后来我看了一些资料,
其实接口跟C++中的多继承完全是2回事。

接口实际上是一个抽象类,不具体实现任何方法,而这些方法,都在继承这个接口的类中实现。说白了,接口就是用来管理类的。当接手一个大型应用程序时,最初的工作是定义顶部的抽象类和接口,从而从整体上把握大型程序的结构。
------解决方案--------------------
同意樓上cybcha的觀點,“接口就是用来管理类的”。

接口的“用戶”是程序員(即使用你所設計的類的人),而不是我們通常概念上的用戶,即終端用戶。

只有當你把程序員當作你的用戶時,你才能真正體會接口的作用。

把接口的作用理解為實現多繼承,絕對是一個天大的誤解。


------解决方案--------------------
试试我能不能说明白
接口的概念实际上完全是来自于现实的,接口也可以叫做规范
用最简单的电源插座来比喻一下
1 接口定义:插座的规范
接口的定义过程实际上就是规定了实现这个接口的类或者接口要实现的功能但没有规定具体的实现过程
插座的规范规定了插座要实现的功能,给连接在上面的电器提供什么样的电力供应
说说我的理解,接口就是一个自动售货机,它能提供的货物是有规定的,你用它的时候从它能提供的货物中选好
自己要的东西,然后按要求给售货机适当的操作,你就可以拿到东西了。至于它内部是怎么实现的就不要管了。
2 实现接口的类或者接口:各个厂商生产的插座
实现接口就是要将接口中规定的各种功能(方法)进行具体的编程实现。
按照生产插座的规范各个厂商生产自己的插座,插座内部的结构可以千差万别但是必须能实现插座的功能
我的理解,再拿售货机来说。不同厂商生产的产品不尽相同,但是他们都通过自己的方式实现了自动售货。
3 对接口的操作:将电源插在插座上
你可以通过相同的方式完成对所有实现这个接口的**进行操作,不管他们有没有关系。
还是插座,你只要知道这个插座满足了插座的规范(实现了接口),就知道了它能给你提供什么样的功能,
尽管去用就可以了。
不说售货机了。来个更通俗的,假设我做了一个接口:飞。麻雀和飞机都实现了这个接口。我要进行的操作是:
会飞的(实现飞这个接口)都来我这里,则麻雀和飞机就都来了,尽管他们相差很大。

写了半天发现自己对接口的理解就能到这个程度了,希望能对你有帮助!
------解决方案--------------------
一句话,接口是用来实现多态的。
------解决方案--------------------
接口有点像中间人,类提供服务,但是他不能告诉你他能提供什么样的服务,接口不能提供服务,但是他告诉你这个类可以提供什么样的服务