认识接口之初,了解到接口是一种规范,当一个类实现某一个接口时,需要实现接口所有的抽象方法...blablabla...
直到一次面试中,得知了实际上接口里的方法是可以有方法体的,这种方法的修饰符为default。
直到后来接触到了顶层抽象的概念时,才发现了接口还可以用于实现顶层抽象,将底层的公共流程提取出来,在顶层接口和抽象类中进行实现来达到代码复用的目的(不知道理解的对不对...)。
后来又从他人口中得知,接口对于项目的维护也有帮助,比如某个项目中某一类别的类都实现了一个空的接口,当希望找到这个类别全部的类时,可以通过编译器查看实现了这个空接口的类有哪些。
也可以通过接口对传入方法的对象加以管控。
public static <T extends 某接口> void test(T t) { }
//大概有可能是这个样子吧,别人讲概念+自己脑补...
还有接口的多态(实现类的对象赋给接口声明)
Queue<Integer> queue = new ArrayDeque(); Queue<Integer> list = new LinkedList<>();
比如上面的是两个队列,第一个是循环数组队列,第二个是链表队列,当使用多态后,如果想从循环数组队列切换为链表队列会比较容易,这同样也是它作为一种规范的好处。
Queue接口本身具备了add、offer、remove、poll、element、peek六个抽象方法,而ArrayQueue和LinkedList都有对这六个抽象方法进行实现,所以即便一个项目中以上面的语法格式创建了对象并进行多次使用后,当想要切换为
另一种实现类也较为轻松,否则假设一个实现类中的方法叫add,另一个实现类叫insert,一旦面临切换的问题可能需要修改大量代码。