java中接口中定义的方法都是一些规范,并没有实现,当实现这个接口的时候我们仍然需要去实现接口中的方法,既然如何,我们为什么不抛开接口呢?虽然我知道接口肯定是有用的
java中接口中定义的方法都是一些规范,并没有实现,当实现这个接口的时候我们仍然需要去实现接口中的方法,既然如何,我们为什么不抛开接口呢?虽然我知道接口肯定是有用的
接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。
建立接口,不同的子类可以用不同的方式表示此接口。
接口被用来建立类与类之间的协议。
interface不仅仅是一个极度抽象的类,因为它允许人们通过创建一个能够被向上转型为多种基类的类型,来实现某种类似多重继承变种的特性
以上说法参考java编程思想
楼上说的都很对,我说下我这用的另一个场景。
接口写的增删改查方法,但数据库有mysql和oracle,只要对同一接口实现mysql和oracle两种,调用的时候注入不同的实现就可以无痛切换数据源了。
如果没有USB标准,那么DELL开发的USB驱动,加载USB的方法名字叫loadUSB(), HP开发的USB驱动,加载USB的方法名叫loadHPusb()等等,如果有1万家厂商,其中就因为一个方法的命名不同,写操作系统的那些人,如果想加载一下USB驱动,请问需要怎么调用加载驱动的方法?
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
最上面的是在扯淡。
接口是JAVA为了实现类似C++里面的多继承的一种妥协方案。
比如,有接口A,然后B、C、D都实现了接口A。
就类似于B、C、D都继承了抽象类A,都可以调用A中定义过的方法。
比如需要对B、C、D的对象做类似的操作,就可以写出类似的代码。
甚至可以把类似的代码抽象封装成函数,类等等。
传递参数的时候,可以把类型写成A,那么B、C、D类的对象就都可以传递进来。
各种。
总之,接口不是为了规范产生的,它的好处也不是什么规范,而是尽量抽象,减少重复的代码。
(说的装逼一点,叫更加符合面向对象的思想blabla……)
(另外,不规范都是程序员的问题,接口并不能拯救世界。)
实现类似的效果,只有两种方案:
方案1:B、C、D都继承于A。
方案2:B、C、D都实现A的接口。
但是很明显,JAVA不支持多继承……于是只能用方案2,实现多个接口……
所以你懂的,接口是很必要的。
【回复1】写在这里比较清晰:
请问为什么需要函数呢,直接写代码不行吗?
请问为什么需要类呢,直接写函数不行吗?
当然可以!
但是用了函数和类,可以为你减少重复的代码啊。
你在考虑用继承或者接口的前提,一定是要“ B,C,D具有相同或者类似的行为,可以整合到一起 ”。
接口可以让你的B、C、D类的对象都可以当做同一个类型(A接口)的参数到处传递,做相同的操作。
(也就是说,比如B继承Y,又实现了Z,那么B既可以当做Y类型的参数,又可以当做Z类型的参数)
合理利用可以减少重复代码。。。
合理利用可以减少重复代码。。。
合理利用可以减少重复代码。。。
重要的话说3遍。
考虑 JAVA 8(JDK1.8)里,接口已经可以自带默认的实现了。
也就是说,如果你的B、C、D做的操作是一样的,那么直接实现A接口然后啥都不用写了。
改的时候也只需要改一个地方就OK了。
(等效于多继承,B可以实现A接口,S接口,X接口……)
【回复2】写在这里比较清晰:
如上图,这个构造函数的参数允许是java.util.List(这是一个接口)。
于是,实现了这个接口的,比如ArrayList,LinkedList,Vector,Stack等等就都可以作为参数传递进去。
如图,不管ObjectList具体是什么类型的,因为它实现了List接口,所以都可以用ObjectList.size()来获取元素个数。
上面这个例子就可以说明:
一个函数就可以处理ArrayList,LinkedList,Vector,Stack等等各种类型的参数。
而不需要为每一个类型都写一个构造函数。
因为,有接口。