感谢:bilibili up主:学相伴飞哥 倾囊相授!这只是我的学习总结,更多知识可以关注飞哥!
1.为什么要面向接口编程:
在一个接口一个实现类的编程中面向接口编程毫无意义,这和抽象类+实现类不是一样的吗,spring中也有大量的抽象类来实现功能。但是,接口的好处是约束、规范。当一个东西有多套实现方式时,就可以用一个接口来将他们约束起来,这样在未来业务拓展时会非常方便。同时在jdk的动态代理需要以接口的方式才能实现(在框架中大量存在,比如:mybatis的mapper,spring的aop)
2.注意点:
接口中的方法写成 : void XXX(); 实际上是省略了public abstract 这两个关键字的,目的是为了开发时让程序员少写点代码,接口实现类中的方法都必须是public。同理,接口中的变量定义,int a= 10; 同样省略了 public static final 这三个关键字,括号中是原因:(定义时必须赋值是因为:int a;这个属性a是输入对象的,接口是不能new对象出来的,所以定义时不赋值是没有意义的。)
3.抽象类就是一个比普通方法多了一个抽象方法,抽象方法是子类的一种约束,告诉子类一定要覆盖和重写的方法。
4.为什么会存在抽象类呢?
原因是在实际的业务中,普通的父类很多时候无法起到约束子类的作用,比如:重写的方
法。
●因为能够让子类重写的方法,大部分情况父类是不需要去做事情,也就是必须让子类
自身去实现。普通的父类是起不到约束的作用,也就是说,父类中需要覆盖的方法和
普通方法这个时候就难以分辨和区分。所以就有了抽象方法abstract。后续的接口更
加能体现的淋漓尽致。
●我们知道抽象类。可以定义抽象方法和非抽象方法。那么父类中的非抽象方法的意义
是什么呢?其实还是回归到继承的概念:职责分担,大部分父类的非抽象方法就是去
分担子类的业务,这样便于后续的维护和升级,这样就不需要去修改每个子类。只需
要修改父类的方法,当然前提是方法的访问权限必须是: public或 者protected的,如
果是缺省的就必须在同包package中。
●抽象类,在平时的业务中那些场景下可以用到抽象类呢?
● 比如springmvc路 由的继承
● hibernate、 jdbctempalte中的通用类的增删改查
● 还有就是spring框架中存在大量的抽象类,其意义就是:责任分担。
5.接口中,可以定义静态方法,这个方法可以通过接口类去调用(接口名字.方法名字),这是公用的方法,表示实现了这个接口的所有实现类都可以去调用。
6. jdk1.8之后新增了default和static方法,慢慢替代了抽象类的含义,但是不能完全消除抽象类,default很好的解决了接口实现类只想实现部分接口中的方法的想法。只需要在接口方法前面加上default关键字,那么这个方法在实现类中就是可以实现,可以不实现。



