一个接口表示:“所有实现了该特定接口的类看起来都像这样”
在stackoverflow中看到了一个关于接口与抽象类的较好的回答
Abstract classes应主要用于密切相关的物体。Interfaces更好地为不相关的类提供通用的功能。
从业务上来讲,一个接口是一个实现协议,它规定你要实现什么,而不是如何实现
基本结构
创建一个接口时,需要用interface替换掉class,并且可以在接口钱添加public或者不不添加任何控制符,和对类的作用一样。
接口也可以含有变量,但这些变量隐式地是static和final的,所以接口是不存在变量的
接口中的方法只能public的,即使你不去添加public控制符
完全解耦
只要一个方法操作的是类而非接口,那么你就只能使用这个类及其接口。如果你想要将这个方法引用于不在此继承结构中的某个类,那就不太可能了。
但可以通过使用接口来放宽这个限制
多重继承
java不支持多重继承,但是可以通过实现多个接口。
使用接口的主要目的是能够向上转型为多个基类型,来获取更多的灵活性,
并且防止客户端程序员创建该类的对象,并确保这仅仅是建立一个接口。
通过继承来扩展接口
接口之间可以使用继承(extends的方式来扩展)
组合接口市的名字冲突
如果组合接口时不同的接口具有相同参数列表的方法,但却有不同的返回类型,此时编译器会报错