javaOO,构造器,super关键字

时间:2022-04-10 19:31:42

问题一:当new一个对象,调用构造器,具体干了些什么什么?

问题二:如果是new一个子类对象,构造器又干了哪些事情。

先给出结论。

结论一:new对象的时候,构造器具体干了4件事:

1.首先在堆当中为对象分配空间。

2.在该空间中划分出属性。

3.然后对属性进行初始化。

4.最后执行程序猿在构造器中书写的代码。

结论二:new子类对象的时候,(java内存叠加机制)

先找到子类对象的父类执行父类的构造器,在堆内存中产生子类对象中的父类的那一部分,完成以后再执行子类的构造器产生子类对象特有部分,最后组成一个子类对象。//注意:至始至终只有一个子类对象

接下来进行验证,这里主要验证上述结论一中第3步,和第4步的顺序,会用到super关键字。

ok,首先来三个类,Father类,Son类,Test类。(注意这我写的这三个类是严格的java标准类)

public class Father {

private String name;

private int age;

public Father() {
System.out.println("在父类构造器无参中");
}

public Father(String name,int age) {
System.out.println("在父类的有参构造器中");
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String toString() {
return this.name;
}

}
public class Son extends Father {private int money = this.getAge() * 100;public Son() {System.out.println("在子类构造器无参中");}public Son(String name, int age) {super(name,age);System.out.println("在子类的有参构造器中");}public int getMoney() {return money;}public void setMoney(int money) {this.money = money;}}

public class Test {

public static void main(String[] args) {
// TODO Auto-generated method stub
Son son = new Son("yangzai",22);
System.out.println(son.getMoney());
}
}
运行结果:

在父类的有参构造器中

在子类的有参构造器中

2200