在Java中尽量不要在构造器里调用可能被重载的虚方法。
因为构造器的初始化顺序大概是
父类静态块---->子类静态块----> 父类初始化语句---->父类构造函数---->子类初始化语句---->子类构造器。
如果父类构造器执行的时候,调用了子类的重载方法,如果重载方法中引用了子类的类字段,然而子类的类字段还在刚初始化的阶段,刚完成内存布局,可能为null的。这种调用方法是极度危险的。
在Java中尽量不要在构造器里调用可能被重载的虚方法。
因为构造器的初始化顺序大概是
父类静态块---->子类静态块----> 父类初始化语句---->父类构造函数---->子类初始化语句---->子类构造器。
如果父类构造器执行的时候,调用了子类的重载方法,如果重载方法中引用了子类的类字段,然而子类的类字段还在刚初始化的阶段,刚完成内存布局,可能为null的。这种调用方法是极度危险的。