学Java的几个疑问:子类对象的实例化过程、super和this的疑问

ScorpioZZR 2004-06-22 11:56:16
张孝祥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();
}
}
...全文
461 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gyang 2004-09-07
  • 打赏
  • 举报
回复
rubbish
jonasxujun 2004-06-27
  • 打赏
  • 举报
回复
在JAVA中,子类无条件的继承父类的无参数的构造方法。但可以在子类中覆盖父类的构造方法。

另外,子类若要调用父类的某一构造方法,则必须是子类构造的方法的第一句,调用SUPER()。
atlcat 2004-06-27
  • 打赏
  • 举报
回复
1和5有何区别?(5分)
例如:
class Person
{
public String name = "unknown";
public int age = -1;
……
中,1做的工作相当于:public String name;
public int age;
5做的工作相当于:name="unknown";age=-1;
homepna 2004-06-27
  • 打赏
  • 举报
回复
楼上说的不错
ScorpioZZR 2004-06-26
  • 打赏
  • 举报
回复
没了??
ScorpioZZR 2004-06-25
  • 打赏
  • 举报
回复
不错啊,真希望还有人来补充一下:)
starryC 2004-06-25
  • 打赏
  • 举报
回复
up
lqtflwg718 2004-06-24
  • 打赏
  • 举报
回复
super的作用是调用父类的构造函数
kakajenifer 2004-06-24
  • 打赏
  • 举报
回复
ScorpioZZR 2004-06-23
  • 打赏
  • 举报
回复
为什么我的问题没有人回答啊????
请问:
1和5有何区别?
能不能分别解释一下这几个步骤分别执行了哪些代码?(分析每一个步骤)
为什么super和this调用语句不能同时在一个构造函数中出现?
为什么super或this调用语句只能作为构造函数中的第一句出现?
ScorpioZZR 2004-06-23
  • 打赏
  • 举报
回复

楼上的,我不要这种的解释啊!!!
能不能回答我的问题啊??
ScorpioZZR 2004-06-23
  • 打赏
  • 举报
回复
自己up,大侠帮忙回答一下吧谢谢了!!!!
HawaiiLeo 2004-06-23
  • 打赏
  • 举报
回复
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); //执行当前构造方法中的代码
//public Student(String name,int age),有this语句调用
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();
}
}
wuyaxlz 2004-06-23
  • 打赏
  • 举报
回复
up

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧