为什么一定要使用接口呢?

时间:2021-09-25 05:19:06
刚毕业,刚做了2个项目,但是我一直没明白为什么一定要放一个接口呢?比如在service层里面,明明都是每个对象对应一个操作的service类,但是为什么非要每个类都写一个接口呢?也没有别的类来继承这个接口啊?目前没有发现其他什么好处,请大牛指导谢谢。。。。

64 个解决方案

#1


便于调用扩展啊…………

#2


接口就是标准,是用来隔离具体实现的(或者说是和具体实现解耦)。举个生活中的例子就是:各种手机、移动硬盘等连接上上的USB接口就是标准,大家各自制造自己的具体产品。产品使用者和提供者都遵守这个标准,那么使用者就不必担心自己电脑上的USB接口是否只能插移动硬盘而不能插手机。再打个比方,网络上的各种协议,比如HTTP协议,只要客户端和服务端都遵守这个协议,那么无论是用火狐狸浏览器还是用IE,也或者是360浏览器,都可以访问,不用担心服务端发过来的信息,浏览器解析不了。回到主题,程序接口的使用就将使用者和服务提供者之间进行了解耦,只要实现着遵守这个接口来做实现,使用者就不必担心具体的实现代码怎么写的。当然了如果再深究其实没有这么简单,比如实现要遵守“里氏替换原则”等,如果楼主有兴趣,可以去研究下《敏捷软件开发原则》。希望上边说的东西,能帮楼主理解,多多交流,呵呵呵。

#3


接口易扩展,利于解耦。

#4


虽然我还没有毕业,没有工作经验,但我是这样理解的:易扩展,灵活,写完的代码,不至于就是死的,灵活性较强。

#5


使用接口就是一种规范。

#6


引用 2 楼 achilles12345 的回复:
接口就是标准,是用来隔离具体实现的(或者说是和具体实现解耦)。举个生活中的例子就是:各种手机、移动硬盘等连接上上的USB接口就是标准,大家各自制造自己的具体产品。产品使用者和提供者都遵守这个标准,那么使用者就不必担心自己电脑上的USB接口是否只能插移动硬盘而不能插手机。再打个比方,网络上的各种协议,比如HTTP协议,只要客户端和服务端都遵守这个协议,那么无论是用火狐狸浏览器还是用IE,也或者是36……

赞一个、

#7


你用过电脑吗?如果一个电脑没有USB接口,你会买吗?结合实际一点。。。

#8


引用 7 楼 xiaozzhao 的回复:
你用过电脑吗?如果一个电脑没有USB接口,你会买吗?结合实际一点。。。

你这个是接口是提供给其他程序接口,并非我提问的interface,我是想知道程序内部,为什么一到要有个接口层

#9


我们公司的dao和service都要实现接口,感觉很麻烦。。
不为什么,就是为了规范,不这么做组长就抽你。。

#10


引用 9 楼 bill0605030109 的回复:
我们公司的dao和service都要实现接口,感觉很麻烦。。
不为什么,就是为了规范,不这么做组长就抽你。。

我就是问的这个,现在很不明白其所以然。。。。。。

#11


傻孩子,程序就是一个标准,你做东西的时候完全可以不用接口,也可以不用biz,dao类,但是必须这么写。
继承,封装,多态,用接口就是体现多态,一个接口你可以有很多的实现方法,便于以后的修改和完善。你以后就会明白了

#12


引用 11 楼 houji7327673392 的回复:
傻孩子,程序就是一个标准,你做东西的时候完全可以不用接口,也可以不用biz,dao类,但是必须这么写。
继承,封装,多态,用接口就是体现多态,一个接口你可以有很多的实现方法,便于以后的修改和完善。你以后就会明白了

好吧我们就说说 修改方便 我真没体会到 修改方便在什么地方了?既要改接口 又要改实现类、、不是一样很麻烦?请详解谢谢

#13


接口的最主要的作用是达到统一访问,就是在创建对象的时候用接口创建,【接口名】 【对象名】=new 【实现接口的类】,这样你像用哪个类的对象就可以new哪个对象了,不需要改原来的代码,就和你的USB接口一样,插什么读什么,就是这个原理

#14


对于有些公司来说只是形式,你可以当自己的公司是形式,我说一个我自己的感觉!如果你是老板,别的公司想用你公司的方法来得到一些数据,你会给他一个你的类吗?你肯定给他一个接口,然后给他方法名,他自己可以调用却不知道里面是写的什么;某天,当他给你提了个要求,某个方法,我希望里面的数据有所改变(就是需求跟之前不一样),你会让你手下给他写一个类,而他用的方法名完全没有变,你公司用的自己的类的接口,给他提供的又是另一个类实现的接口!个人理解!希望有帮助

#15


使用接口就是一种规范。

#16


java 就是面向接口开发的,而且定义接口操作起来比较灵活。
如果从软件开发解耦方面考虑,可能耦合性会好些。

#17


该回复于2012-03-09 15:51:17被版主删除

#18


接口的好处主要是为了扩展性 和维护性 而且实际操作中也方便分模块分工协作。。
就一个大项目 肯定是需要很多人一同去协作来做的。。怎么样操作就可以用接口。。
专门的一个人把接口定义好。。底下的人分别实现接口就可以了。。

扩展性 主要是体现在以后扩展方便。。比如项目之前是用mssqlserver 数据库的。。后来需要改成mysql 或orcale 代码的其它方全的代码就不需要修改。。直接重新一个实现类就可以了。。如果用框架来实现的话只需要改一下配置文件就可以了

维护性也是一样。。有了接口能明确项目实现哪些功能  相对的维护就可以了。。
接口 就是定义能做什么的  实现类才去实现怎么样去做。。就向上面几楼举的usb接口的例子是一样的。。
实现在这个接口就可以通用不管是哪家厂商生产的

#19


全部是方法,是个准则,方便管理。

#20


方便調用

#21


规定必须写就得必须写,没规定可以不写,但如果你要持续维护,迟早有些类你要写接口。

#22


接口可以封装内部的实现,当你发布出去,用户只能看到你的接口而看不到你内部的实现

#23


利于扩展和维护,同时可以隐藏实现代码,是程序更安全。

#24


我觉得主要是为了便于扩展,使你的代码不和具体的实现类耦合,只依赖于接口!
JDBC用过么?这就是面向接口编程的例子,不管你是连接什么数据库,你的代码都不需要做修改
,仅仅需要导入不同的实现类,也就是不同的驱动包而已

#25


是中规范来的,便于以后可以扩展

#26


那问楼主一个问题,你想想如果手机充电器能统一了,是不是很方便?

#27


上面有的讲得很专业,这么说吧,接口要实现某功能就是你只管调用它,至于它怎么实现,你不用管。假如你是老总,你就直接叫你的秘书倒杯咖啡,至于你的秘书怎么倒,你甭管了,来了你就喝咖啡就行了。要咖啡来咖啡,要奶茶来奶茶。明白?

#28


其实无论是谁刚开始学java的时候都会对接口这个概念不明白,觉得没必要,还不如直接调用实际类方法实用。但是细想一下,当你的项目一大,面向接口的变成就非常的灵活方便了。例如有A接口、B类实现了A接口
A b=new B();  
这样你就能做到统一访问,你想想,我现在有一个插座(A),现在有一个类B是两插口的实现了A的方法规范,那B就可以访问A定义的方法,又因为B重写了A接口的方法,所以B实际访问的就是自己重写的方法。
如果我现在想做一个三头的插口,那就A c=new C();这样的话扩展性不是很灵活吗

#29


该回复于2012-03-11 08:12:09被版主删除

#30


最大限度解耦

#31


接口有两种意思:一 常用常量和方法的集合,二 一种编程规范

#32


高内聚低耦合,符合软件工程思想

#33


定义一种标准,多种实现,用于解耦

#34


谢谢大家!!!

#35


从实际经验来看,有些类迟早都要接口实现分离,比如service和dao,虽然有时候只有一个实现看上去不需要接口,不过为了统一规范,还是写了。

个人认为也不是每个地方都需要接口的,滥用接口也给自己带来不必要的复杂,看情况使用吧,service和dao个人感觉还是写接口为好,毕竟属于两个比较大的分层。

#36


解耦,可扩展,统一规范。在hibernate,spring遍布接口,bean,action什么的都是通过配置文件配置的,这样在替换一个bean的类为另一个类时,只需要修改配置文件而不需要改变其它代码。

#37


java不支持类的多重继承,
但是用接口的话,可以实现多个接口

#38


当你做到架构师的位置的时候,就会知道原来这东西是这么有用。
我们现在都是程序员,会觉得这东西有什么用嘛。
但是到了设计软件的时候,这个东西还是很有用的。
有经验就知道了。

#39


假如前端和action别人都写好了,而service还未完成,这时前端组如何测试呢?
只需要写个简单的测试用的service实现定义的接口即可,接口的一个重要作用就是解耦

#40


#38楼主说的很有道理,等你站的高了,就会理解对系统的管理是多么重要!像java中的许多特性都体现了管理的方法。接口的编写为系统后期的维护与扩展提供了方便。。。。

#41


该回复于2012-03-13 11:48:38被版主删除

#42


在开发中我们经常会遇到
在实现类中写一些私有的方法让多个公共方法调用
这时候如果不定义接口,这些私有方法会直接暴露在用户面前,甚至产生漏洞。

#43


接口是用来标记类的,不同的类属于不同的接口(通过向上转型),管理接口比管理各种各样的类方便多了

#44


严格来说,接口类似于c的.h文件,只是定义范畴,工程管理中要求用接口来抽象调用入口,这是好的代码规范。

但是,如果你用的spring,那么有些情况下你必须要用接口,比如在使用aop的事务时,返回的是代理类,你无法进行直接操作。使用抽象的接口,那么aop会使用接口形式做代理,那就没有问题了。

#45


Spring!,不解释
(看不懂说明你是纯新手。。。)

#46


解耦, 请面向接口编程

#47


不理解接口,就完全不理解j2ee或jee,整个j2ee规范里面的东西,基本都是接口,包括服务器提供商需要实现的和应用开发需要实现的接口。你可以看一些源码,定义全部是接口,比如jdbc、jndi、jms等等。
但是应用程序应该适可而止,不能为了基本用不到的所谓灵活,搞很多层接口。也是完全没有必要的。给开发和调试带来很多麻烦。

#48


那要这么说的话,台式机电脑中有个显卡插槽,那个相当于接口,不管是ati的还是nvidia的显卡,不管是什么型号的显卡,一插就能用。就是通用规范。这个是系统内部的吧。
引用 8 楼 lwkjob 的回复:
引用 7 楼 xiaozzhao 的回复:

你用过电脑吗?如果一个电脑没有USB接口,你会买吗?结合实际一点。。。

你这个是接口是提供给其他程序接口,并非我提问的interface,我是想知道程序内部,为什么一到要有个接口层

#49


不是很了解。感觉就像是串联与并联的关系吧,方便于技能保密与后期维修。。。。

#50


接口就是最大化的抽象,面向对象的终极目标
大道无形,大音希声
寻找问题的本源 最后必然是  无
哈哈

#1


便于调用扩展啊…………

#2


接口就是标准,是用来隔离具体实现的(或者说是和具体实现解耦)。举个生活中的例子就是:各种手机、移动硬盘等连接上上的USB接口就是标准,大家各自制造自己的具体产品。产品使用者和提供者都遵守这个标准,那么使用者就不必担心自己电脑上的USB接口是否只能插移动硬盘而不能插手机。再打个比方,网络上的各种协议,比如HTTP协议,只要客户端和服务端都遵守这个协议,那么无论是用火狐狸浏览器还是用IE,也或者是360浏览器,都可以访问,不用担心服务端发过来的信息,浏览器解析不了。回到主题,程序接口的使用就将使用者和服务提供者之间进行了解耦,只要实现着遵守这个接口来做实现,使用者就不必担心具体的实现代码怎么写的。当然了如果再深究其实没有这么简单,比如实现要遵守“里氏替换原则”等,如果楼主有兴趣,可以去研究下《敏捷软件开发原则》。希望上边说的东西,能帮楼主理解,多多交流,呵呵呵。

#3


接口易扩展,利于解耦。

#4


虽然我还没有毕业,没有工作经验,但我是这样理解的:易扩展,灵活,写完的代码,不至于就是死的,灵活性较强。

#5


使用接口就是一种规范。

#6


引用 2 楼 achilles12345 的回复:
接口就是标准,是用来隔离具体实现的(或者说是和具体实现解耦)。举个生活中的例子就是:各种手机、移动硬盘等连接上上的USB接口就是标准,大家各自制造自己的具体产品。产品使用者和提供者都遵守这个标准,那么使用者就不必担心自己电脑上的USB接口是否只能插移动硬盘而不能插手机。再打个比方,网络上的各种协议,比如HTTP协议,只要客户端和服务端都遵守这个协议,那么无论是用火狐狸浏览器还是用IE,也或者是36……

赞一个、

#7


你用过电脑吗?如果一个电脑没有USB接口,你会买吗?结合实际一点。。。

#8


引用 7 楼 xiaozzhao 的回复:
你用过电脑吗?如果一个电脑没有USB接口,你会买吗?结合实际一点。。。

你这个是接口是提供给其他程序接口,并非我提问的interface,我是想知道程序内部,为什么一到要有个接口层

#9


我们公司的dao和service都要实现接口,感觉很麻烦。。
不为什么,就是为了规范,不这么做组长就抽你。。

#10


引用 9 楼 bill0605030109 的回复:
我们公司的dao和service都要实现接口,感觉很麻烦。。
不为什么,就是为了规范,不这么做组长就抽你。。

我就是问的这个,现在很不明白其所以然。。。。。。

#11


傻孩子,程序就是一个标准,你做东西的时候完全可以不用接口,也可以不用biz,dao类,但是必须这么写。
继承,封装,多态,用接口就是体现多态,一个接口你可以有很多的实现方法,便于以后的修改和完善。你以后就会明白了

#12


引用 11 楼 houji7327673392 的回复:
傻孩子,程序就是一个标准,你做东西的时候完全可以不用接口,也可以不用biz,dao类,但是必须这么写。
继承,封装,多态,用接口就是体现多态,一个接口你可以有很多的实现方法,便于以后的修改和完善。你以后就会明白了

好吧我们就说说 修改方便 我真没体会到 修改方便在什么地方了?既要改接口 又要改实现类、、不是一样很麻烦?请详解谢谢

#13


接口的最主要的作用是达到统一访问,就是在创建对象的时候用接口创建,【接口名】 【对象名】=new 【实现接口的类】,这样你像用哪个类的对象就可以new哪个对象了,不需要改原来的代码,就和你的USB接口一样,插什么读什么,就是这个原理

#14


对于有些公司来说只是形式,你可以当自己的公司是形式,我说一个我自己的感觉!如果你是老板,别的公司想用你公司的方法来得到一些数据,你会给他一个你的类吗?你肯定给他一个接口,然后给他方法名,他自己可以调用却不知道里面是写的什么;某天,当他给你提了个要求,某个方法,我希望里面的数据有所改变(就是需求跟之前不一样),你会让你手下给他写一个类,而他用的方法名完全没有变,你公司用的自己的类的接口,给他提供的又是另一个类实现的接口!个人理解!希望有帮助

#15


使用接口就是一种规范。

#16


java 就是面向接口开发的,而且定义接口操作起来比较灵活。
如果从软件开发解耦方面考虑,可能耦合性会好些。

#17


该回复于2012-03-09 15:51:17被版主删除

#18


接口的好处主要是为了扩展性 和维护性 而且实际操作中也方便分模块分工协作。。
就一个大项目 肯定是需要很多人一同去协作来做的。。怎么样操作就可以用接口。。
专门的一个人把接口定义好。。底下的人分别实现接口就可以了。。

扩展性 主要是体现在以后扩展方便。。比如项目之前是用mssqlserver 数据库的。。后来需要改成mysql 或orcale 代码的其它方全的代码就不需要修改。。直接重新一个实现类就可以了。。如果用框架来实现的话只需要改一下配置文件就可以了

维护性也是一样。。有了接口能明确项目实现哪些功能  相对的维护就可以了。。
接口 就是定义能做什么的  实现类才去实现怎么样去做。。就向上面几楼举的usb接口的例子是一样的。。
实现在这个接口就可以通用不管是哪家厂商生产的

#19


全部是方法,是个准则,方便管理。

#20


方便調用

#21


规定必须写就得必须写,没规定可以不写,但如果你要持续维护,迟早有些类你要写接口。

#22


接口可以封装内部的实现,当你发布出去,用户只能看到你的接口而看不到你内部的实现

#23


利于扩展和维护,同时可以隐藏实现代码,是程序更安全。

#24


我觉得主要是为了便于扩展,使你的代码不和具体的实现类耦合,只依赖于接口!
JDBC用过么?这就是面向接口编程的例子,不管你是连接什么数据库,你的代码都不需要做修改
,仅仅需要导入不同的实现类,也就是不同的驱动包而已

#25


是中规范来的,便于以后可以扩展

#26


那问楼主一个问题,你想想如果手机充电器能统一了,是不是很方便?

#27


上面有的讲得很专业,这么说吧,接口要实现某功能就是你只管调用它,至于它怎么实现,你不用管。假如你是老总,你就直接叫你的秘书倒杯咖啡,至于你的秘书怎么倒,你甭管了,来了你就喝咖啡就行了。要咖啡来咖啡,要奶茶来奶茶。明白?

#28


其实无论是谁刚开始学java的时候都会对接口这个概念不明白,觉得没必要,还不如直接调用实际类方法实用。但是细想一下,当你的项目一大,面向接口的变成就非常的灵活方便了。例如有A接口、B类实现了A接口
A b=new B();  
这样你就能做到统一访问,你想想,我现在有一个插座(A),现在有一个类B是两插口的实现了A的方法规范,那B就可以访问A定义的方法,又因为B重写了A接口的方法,所以B实际访问的就是自己重写的方法。
如果我现在想做一个三头的插口,那就A c=new C();这样的话扩展性不是很灵活吗

#29


该回复于2012-03-11 08:12:09被版主删除

#30


最大限度解耦

#31


接口有两种意思:一 常用常量和方法的集合,二 一种编程规范

#32


高内聚低耦合,符合软件工程思想

#33


定义一种标准,多种实现,用于解耦

#34


谢谢大家!!!

#35


从实际经验来看,有些类迟早都要接口实现分离,比如service和dao,虽然有时候只有一个实现看上去不需要接口,不过为了统一规范,还是写了。

个人认为也不是每个地方都需要接口的,滥用接口也给自己带来不必要的复杂,看情况使用吧,service和dao个人感觉还是写接口为好,毕竟属于两个比较大的分层。

#36


解耦,可扩展,统一规范。在hibernate,spring遍布接口,bean,action什么的都是通过配置文件配置的,这样在替换一个bean的类为另一个类时,只需要修改配置文件而不需要改变其它代码。

#37


java不支持类的多重继承,
但是用接口的话,可以实现多个接口

#38


当你做到架构师的位置的时候,就会知道原来这东西是这么有用。
我们现在都是程序员,会觉得这东西有什么用嘛。
但是到了设计软件的时候,这个东西还是很有用的。
有经验就知道了。

#39


假如前端和action别人都写好了,而service还未完成,这时前端组如何测试呢?
只需要写个简单的测试用的service实现定义的接口即可,接口的一个重要作用就是解耦

#40


#38楼主说的很有道理,等你站的高了,就会理解对系统的管理是多么重要!像java中的许多特性都体现了管理的方法。接口的编写为系统后期的维护与扩展提供了方便。。。。

#41


该回复于2012-03-13 11:48:38被版主删除

#42


在开发中我们经常会遇到
在实现类中写一些私有的方法让多个公共方法调用
这时候如果不定义接口,这些私有方法会直接暴露在用户面前,甚至产生漏洞。

#43


接口是用来标记类的,不同的类属于不同的接口(通过向上转型),管理接口比管理各种各样的类方便多了

#44


严格来说,接口类似于c的.h文件,只是定义范畴,工程管理中要求用接口来抽象调用入口,这是好的代码规范。

但是,如果你用的spring,那么有些情况下你必须要用接口,比如在使用aop的事务时,返回的是代理类,你无法进行直接操作。使用抽象的接口,那么aop会使用接口形式做代理,那就没有问题了。

#45


Spring!,不解释
(看不懂说明你是纯新手。。。)

#46


解耦, 请面向接口编程

#47


不理解接口,就完全不理解j2ee或jee,整个j2ee规范里面的东西,基本都是接口,包括服务器提供商需要实现的和应用开发需要实现的接口。你可以看一些源码,定义全部是接口,比如jdbc、jndi、jms等等。
但是应用程序应该适可而止,不能为了基本用不到的所谓灵活,搞很多层接口。也是完全没有必要的。给开发和调试带来很多麻烦。

#48


那要这么说的话,台式机电脑中有个显卡插槽,那个相当于接口,不管是ati的还是nvidia的显卡,不管是什么型号的显卡,一插就能用。就是通用规范。这个是系统内部的吧。
引用 8 楼 lwkjob 的回复:
引用 7 楼 xiaozzhao 的回复:

你用过电脑吗?如果一个电脑没有USB接口,你会买吗?结合实际一点。。。

你这个是接口是提供给其他程序接口,并非我提问的interface,我是想知道程序内部,为什么一到要有个接口层

#49


不是很了解。感觉就像是串联与并联的关系吧,方便于技能保密与后期维修。。。。

#50


接口就是最大化的抽象,面向对象的终极目标
大道无形,大音希声
寻找问题的本源 最后必然是  无
哈哈