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