java 子类构造方法

继承中构造方法的关系

* A:案例演示

* 子类中所有的构造方法默认都会访问父类中空参数的构造方法

* B:为什么呢?

* 因为子类会继承父类中的数据,可能还会使用父类的数据。

* 所以,子类初始化之前,一定要先完成父类数据的初始化。

* 其实:

* 每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。

=============================================================================

继承中构造方法的注意事项:

* A:案例演示

* 父类没有无参构造方法,子类怎么办?

* super解决

* this解决

* B:注意事项

* super(…)或者this(….)必须出现在构造方法的第一条语句上

=======================================================================

class Test2_Extends {

public static void main(String[] args) {

Zi z = new Zi();

}

/*

1,jvm调用了main方法,main进栈

2,遇到Zi z = new Zi();会先将Fu.class和Zi.class分别加载进内存,再创建对象,当Fu.class加载进内存

父类的静态代码块会随着Fu.class一起加载,当Zi.class加载进内存,子类的静态代码块会随着Zi.class一起加载

第一个输出,静态代码块Fu,第二个输出静态代码块Zi

3,走Zi类的构造方法,因为java中是分层初始化的,先初始化父类,再初始化子类,所以先走的父类构造,但是在执行

父类构造时,发现父类有构造代码块,构造代码块是优先于构造方法执行的所以

第三个输出构造代码块Fu,第四个输出构造方法Fu

4,Fu类初始化结束,子类初始化,第五个输出的是构造代码块Zi,构造方法Zi

*/

}

class Fu {

static {

System.out.println("静态代码块Fu");

}

{

System.out.println("构造代码块Fu");

}

public Fu() {

System.out.println("构造方法Fu");

}

}

class Zi extends Fu {

static {

System.out.println("静态代码块Zi");

}

{

System.out.println("构造代码块Zi");

}

public Zi() {

System.out.println("构造方法Zi");

}

}

========================================================================

面向对象(继承中的面试题)

* A:案例演示

*

看程序写结果1

class Fu{

public int num = 10;

public Fu(){

System.out.println("fu");

}

}

class Zi extends Fu{

public int num = 20;

public Zi(){

System.out.println("zi");

}

public void show(){

int num = 30;

System.out.println(num);

System.out.println(this.num);

System.out.println(super.num);

}

}

class Test1_Extends {

public static void main(String[] args) {

Zi z = new Zi();

z.show();

}

}

看程序写结果2

class Fu {

static {

System.out.println("静态代码块Fu");

}

{

System.out.println("构造代码块Fu");

}

public Fu() {

System.out.println("构造方法Fu");

}

}

class Zi extends Fu {

static {

System.out.println("静态代码块Zi");

}

{

System.out.println("构造代码块Zi");

}

public Zi() {

System.out.println("构造方法Zi");

}

}

Zi z = new Zi(); 请执行结果。