它既是工作原理,也是语言特性或语言层面上的基本要求。它本身不是一个操作指令或语句。
A a = new B();
这个操作里当进行到赋值给A a时,实例化工作已经全部圆满结束,跟“跟子类实例化之前必须先实例化父类”没关系了。
一般来说,我们可以不用了解这句话也通常不影响我们的编程工作,但在某些特殊情况下可能会踩坑(我自己就踩过),应当注意。
比如:public abstract class A
{
public A()
{
OnInit();
}
public abstract void OnInit();
}
public class B extends
{
X x=new X();
@Override
public void OnInit()
{
x.XXX();//Error!因为A构造方法会调用此方法,此时A的空间还没初始完毕,X x=new X();还没执行。于是x是个空引用。
}
}
除此之外,代码中体现这个语言特性的机会很少。
或者说,要很直白的体现“子类实例化之前必须先实例化父类”除非把实例化的过程拖得很长,使得对象的实例化迟迟维持在半成品状态,这显然不是个好的设计。这意味着,如果非要“体现”,那通常这就是一个坑。