B继承A
B x = new B();//A的构造函数会被调用吗?
在Java中,无论方法还是方法,都要求在子类的构造函数中调用其父类的构造函数。 如果父类没有构造函数(实际上是默认的无参构造函数),那么子类的构造函数会自动调用它; 如果父类有自己的构造函数(那么父类不会有默认的无参构造函数),那么在子类的构造函数中,必须调用父类的某个构造函数,并且必须调用它在构造函数的第一条语句中。
原因一定是Java语言设计者要求子类有责任保证其继承的父类尽快进入稳定完整的状态。 试想一下,如果没有这样的约束,那么子类继承自父类的一个方法可能会使用父类中的一些变量,而这些变量没有被初始化,从而导致一些不可预测的后果。
因此,当一个类的构造函数是时,是不能被调用的,因为子类的构造函数很难调用父类的构造函数。
B 的无参数构造函数将被调用。 需要强调的是,构造函数不能被继承,但可以使用super来访问。
当类继承父类时,实例化子类时,子类的初始化顺序如下:
1、如果子类中有字段,则先初始化子类的字段。 2. 初始化基类。 如果基类有字段,则先初始化字段,然后执行构造方法。 3、执行子类的构造方法。
说白了就是:先初始化子类字段,再初始化父类字段,然后执行父类构造函数,最后执行子类构造函数。