java学习的基础书看了1,2遍了。不同的书也看过,基本对java有一定的了解。对于接口,感觉比较迷茫。接口也知道书本中写的一些使用接口的规范,也知道接口多线程、接口序列化、接口监听等用到接口。但还是迷茫,自己写程序,比如一些实用的程序,不知道什么情况下必须用接口~!
对于接口自己使用比较迷茫,估计跟初学,不是太熟练不是太董,有关。只懂得按照书本上,监听程序代码用接口,我也照抄。所以,想请各位达人帮忙给点接口的范例,多说明为什么必须用接口。或者把接口说得比较深入比较详细的一些文章给我。谢谢了。
对于接口自己使用比较迷茫,估计跟初学,不是太熟练不是太董,有关。只懂得按照书本上,监听程序代码用接口,我也照抄。所以,想请各位达人帮忙给点接口的范例,多说明为什么必须用接口。或者把接口说得比较深入比较详细的一些文章给我。谢谢了。
笼统地说
接口是制定标准和规范 should do 实现者之间有了共同的交互面
继承是赋予了某种能力 can do
对于concrete class而言 两者都是Type(Is a)
我们可以说ArrayList是一个List,也可以说是一个Object
如果是面向接口,你可以自己先写一个最简单的实现来调试你的代码,Spring这时是个好帮手。如果一个功能有多种实现,比如导出文档。 有的要html的,有的是word/Excel/PPt/PDF 等等。
因为你无法预见他们到底需要什么,这时候,你可以用接口,要求每个实现只需要完成 export 方法就行。
然后你自己做了一个Excel的,以后按需要再完成其他的,而此时,你原来的程序根本不用修改,因为他们调用的是接口,而不是具体的某个实现类。
引用他的原话:
"然后你自己做了一个Excel的,以后按需要再完成其他的,而此时,你原来的程序根本不用修改,因为他们调用的是接口,而不是具体的某个实现类。"
以后怎么再完成呢,只要你编写个word类来继承那个接口就可以了,,是这样吧, java2000_net高手
http://blog.csdn.net/Slugfest/archive/2008/01/10/2034359.aspx
这个时候你需要继承多个接口,例如implements interface1 interface2,而这样做的目的就在于,能够继承多个实现对应于每一个接口的“实现类”。
并且方法中的参数也可以定义为接口类型,这样在传递参数的时候也可以转换成具体的类,这样的程序设计比较灵活。
我觉得还是得多用,有一天自己不知不觉就入门了~
只是让产品的提供商去实现,这样有一个好处,让使用的人只要学习一种就可以了,根本
用不着去考虑具体是如何实现的。如果没有这个规范,那就讨厌了,MySQL的要去学习MySQL
的实现,Oracle要去学习Oracle的实现等等。再有接口用于降低应用程序各层之间的耦合度,让干涉减至最小,实现程序的多态性。要想了解更多的可以去看看有关于面向对象设计原则的资料。
我补充一下自己的体会。
前段时间为某银行写了一个单点登录的网站(简称MIS),
该网站的作用是:所有登录进MIS的用户,当需要登录接入MIS的子系统时,直接跳转而不需要再次输入登录用户名密码。
(为讨论的针对性,我们省去密码修改的功能,假设在MIS中可以得到当前用户在各子系统的登录用户名和密码)
于是,我们如果能够知道当前用户登录子系统的URL请求时,直接让MIS的请求用户在IE中做URL跳转即可。
但是我们并不知道未接入的各个子系统的登录地址、参数名称,那怎么办呢?
(如:有的是:http://ip1:port1/login1.do?user1=?&pass1=?,有的是http://ip2:port2/login2.do?user2=?&pass2=?)
于是设计接口如下:public interface ISingleSignOn{
/**
* 根据用户名密码、服务器信息,得到登录子系统的表单信息
* @param loginURL 登录子系统的地址,如:http://ip1:port1/login1.do
* @param userName 用户名
* @param password 密码
* @return 登录子系统所需要的URL字符串
* @throws CanNotLoginException 不能登陆时抛出异常,如:子系统不可用、网络异常等
*/
public String getLoginURL(String loginURL,String userName, String password) throws CanNotLoginException;
}若一个新的子系统A需要接入MIS,则它先实现一个该类ISingleSignOn
(假设它的用户名参数名为:username,密码参数名为:pwd,一个完整登陆地址为:http://127.0.0.1:9009/login.do?username=admin&pwd=admin)
则ISingleSignOn的实现类可以这样写:public SingleSignOnExample implements ISingleSignOn{
/**
* 根据用户名密码、服务器信息,得到登录子系统的表单信息
* @param loginURL 登录子系统的地址,如:http://ip1:port1/login1.do
* @param userName 用户名
* @param password 密码
* @return 登录子系统所需要的URL字符串
* @throws CanNotLoginException 不能登陆时抛出异常,如:子系统不可用、网络异常等
*/
public String getLoginURL(String loginURL,String userName, String password) throws CanNotLoginException{
String url=loginURL;
url+="?username="+userName+"&pwd="+password;
return url;
}
}当然,loginURL、userName、pssword、实现类路径(classPath) 等这些内容都需要放在数据库表中维护。
可以建立一个表,子系统的属性表来维护这些东西。然后在MIS的子系统的登录实现类中,你可以通过(伪代码)
ISingleSignOn signOn = (ISingleSignOn)Class.forName(classPath).newInstance();
String url = signOn.getLoginURL(.......):
//本例中:classPath="SingleSignOnExample".
来登录子系统A了。
不过说真的,楼上除了几个兄弟,其他所有的兄弟的话,只是把java书籍的使用接口的简单的道理说出来。说实话,看了也等于白看。这些定义再书上都有。问题就是为什么非要用到接口,什么情况下自己写程序要用到接口。并非简简单单可以多继承的问题。看了楼上兄弟推荐的设计模式。刚看了第一个模式,策略模式,我终于明白了。知识掌握的不一定很高,才学来的,先学现卖,给总结一下接口的用法。为什么非要用接口!也为了广大之学习过java,但没有多少实践的人来说明一下。对楼上兄弟们抱歉,最近在忙其它事情,也看了设计模式,所以这么长时间没来结贴。下面总结一下。稍后!
不可以使用继承。因为某种鸭子,比如机器鸭子,不会飞。所以不能单独继承。
继承的话,你也可以把鸭子飞的动作重写成没动作。但对于以后增加其他的种类的鸭子来说,每个都写,不现实。所以要用接口。巴飞翔、叫,用接口来实现! (很多学习java基本知识的时候,认识面就到这个层次!)
只知道使用接口可以多继承。
下面接着说,比如有的鸭子会刮刮叫,有的鸭子回哈哈叫,有的鸭子不会叫。
那么用接口来实现,不等于吧每个接口重的行为都重新写一边么。比如,鸭子有10中叫的方法,你用接口继承这些叫唤的方法,不等于每次是用要把10中叫的方法重新写一边?
而且以后每次增加叫的方法,也要把以前继承的写过的类,重新巴新加入的方法写一边。不现实。所以简单的用接口也不行!!!!!! (这个层次,学习java基础知识100编的人都不可能认识到!)哪怎么办呢巴叫唤的行为提出来,作为接口各种叫法,比如呱呱叫继承这个接口。哈哈叫也继承!爻力的回答,暂时没看,稍候看看。最后在结分!使用的时候申明一下,即可是用某种叫法。而且其他利用到接口的其他种类鸭子,以后新增叫法,继承接口,使用,也不会影响。某种鸭子的某些初始行为,可以在构造函数中申明好。比如使用set定义某种行为。使用的时候,就直接出现某种行为了。好了,解释完毕,我最后一行,使用的时候的说明,有点模糊。
要详细写清数,必须用代码结合文字来说明。但没那么多的篇幅写上去。感兴趣的朋友,可以招本设计模式来看看!上面真正有为什么使用某些东西的详细说明。而不仅仅局限于怎么使用。java基础书上,往往局限于怎么使用。还有一点简单的道理。
不可以使用继承。因为某种鸭子,比如机器鸭子,不会飞。所以不能单独继承。
继承的话,你也可以把鸭子飞的动作重写成没动作。但对于以后增加其他的种类的鸭子来说,每个都写,不现实。 所以要用接口。巴飞翔、叫,用接口来实现! (很多学习java基本知识的时候,认识面就到这个层次!只知道使用接口可以多继承。)
下面接着说,比如有的鸭子会刮刮叫,有的鸭子回哈哈叫,有的鸭子不会叫。
那么用接口来实现,不等于吧每个接口重的行为都重新写一边么。 比如,鸭子有10中叫的方法,你用接口继承这些叫唤的方法,不等于每次是用要把10中叫的方法重新写一边?
而且以后每次增加叫的方法,也要把以前继承的写过的类,重新巴新加入的方法写一边。 不现实。所以简单的用接口也不行!!!!!! (这个层次,学习java基础知识100编的人都不可能认识到!)
哪怎么办呢?把叫唤的行为提出来,作为接口 各种叫法,比如呱呱叫继承这个接口。哈哈叫也继承! 使用的时候申明一下,即可是用某种叫法。而且其他利用到接口的其他种类鸭子,以后新增叫法,继承接口,使用,也不会影响。 某种鸭子的某些初始行为,可以在构造函数中申明好。比如使用set定义某种行为。使用的时候,就直接出现某种行为了。 好了,解释完毕,我最后一行,使用的时候的说明,有点模糊。
要详细写清数,必须用代码结合文字来说明。但没那么多的篇幅写上去。 感兴趣的朋友,可以招本设计模式来看看!
上面真正有为什么使用某些东西的详细说明。而不仅仅局限于怎么使用。 java基础书上,往往局限于怎么使用。还有一点简单的道理。 爻力的回答,暂时没看,稍候看看。最后在结分!
甚至一个main函数能搞定一切,
先写个程序仅有main函数,再把功能扩充起来,等代码量多了,你自然明白该怎么写才看起来舒服