学Java的几个疑问:子类对象的实例化过程、super和this的疑问
张孝祥Java培训教程里说
子类对象的实例化过程(以下按顺序):
1.产生对象并对成员变量默认初始化
2.对构造方法中的形式参数赋值
3.构造方法中是否有this语句调用
4.super语句调用或隐式调用父类的构造方法
5.去当前类中的成员变量显式初始化
6.执行当前构造方法中的代码
请问:
1和5有何区别?(5分)
能不能分别解释一下这几个步骤分别执行了哪些代码?(分析每一个步骤)(30分)
为什么super和this调用语句不能同时在一个构造函数中出现?(5分)
为什么super或this调用语句只能作为构造函数中的第一句出现?(5分)
例子程序见下:
class Person
{
public String name = "unknown";
public int age = -1;
public Person()
{
}
public Person(String name,int age)
{
this.name = name;
this.age = age;
}
public void getInfo()
{
System.out.println("name=" + name + ",age=" + age);
}
}
class Student extends Person
{
public String school = "unknown";
public void Student()
{
super();
}
public Student(String name,int age)
{
super(name,age);
}
public Student(String name,int age,String school)
{
this(name,age);
this.school = school;
}
public void study()
{
}
}
class TestStudent
{
public static void main(String[] args)
{
Student st = new Student ("zhangsan",20,"清华大学");
//Student st = new Student();
/*st.name = "zhangsan";
st.age = 20;*/
st.getInfo();
}
}