在看Spring源码的时候注意到抽象函数的中构造函数的使用,当时想了一下抽象函数不能实例化为何还要有构造函数呢?看了下往上的资料总结一下:java
Java子类建立实例化初始化分为三个部分:函数
第一个部分是成员字段后的直接的初始化语句,spa
第二个部分是由初始化块组成,包括静态初始化和非静态初始化orm
第三个部分就是java源代码中的构造方法中的代码,对象
调用初始化方法并不表明会生成对象,你的java代码中出现new关键字加上构造方法的调用,只会生成一个对象,其父类对象不会生成,因此调用父类为抽象类的构造方法彻底是合理的。继承
抽象类中的构造方法实际上是用来给继承的子类来用的,由于构造方法至关于初始化方法,当子类调用构造方法时必须调用父类构造方法,因此你能够在子类产生对象时抽象类中按需求初始化抽象类中的字段以及执行一些初始化代码。源码