父类
public class BaseServiceImpl<T> {
public BaseDaoI baseDaoI;
public BaseServiceImpl(BaseDaoI baseDaoI){
this.baseDaoI =baseDaoI;
}
子类去继承BaseServiceImpl 需要初始化baseDaoI
子类:
如图向父类传递baseDaoI对象,但一定需要添加静态修饰。
由于jvm类加载顺序
1)父类的变量,父类的构造函数。
2)子类的变量,子类的构造函数。
所以父类初始化baseDaoI的时候,子类还没有baseDaoI还没初始化,怎么能传递baseDaoI到父类呢。
而添加了static之后 ,子类的<静态>变量是先于父类的变量初始化的。所以传入父类的构造方法则没问题。
去掉static修饰,编译报错。
最后是加载顺序表
父类静态变量初始化
父类的静态初始化块
子类初始化静态变量
子类的静态初始化块
父类非静态变量初始化
父类的非静态初始化块
父类构造函数 start
父类调用draw方法 null
父类构造函数 end
子类初始化非静态变量
子类初始化私有变量
子类的非静态初始化块
子类构造函数 start
子类调用draw方法子类初始化私有变量
子类构造函数 end