Son s = new Son();这句是利用Son()这个默认构造方法初始化并创建Son类对象s.
Son s = new Son(20);这句是利用Son(int age){}这个带参数构造方法初始化并创建Son类对象s。
super()是执行父类的够造方法;作者: 陈丽莉 时间: 2013-3-31 23:15
记得及时处理帖子哦~ 追问,或改成【已解决】~作者: 夏凡 时间: 2013-4-1 12:36
class Father
{
Father(){}
Fahter(int age)
{
System.out.println("father age:"+age);
}
}
class Son extends Father
{
Son()
{
System.out.println("son");
}
Son(int age)
{
super(age);
System.out.println("son age:"+age);
}
}
复制代码
首先要明确的是:
1.相应的类建立相应的对象
2.相应的构造函数只用来初始化相应的对象
执行过程如下:
Son s = new Son(); 这个语句建立的是Son对象并且是无参数的,它只跟Son()这个构造函数有关,与父类没有任何关系,结果是son
Son s = new Son(20);这个语句建立的也是Son对象但是有参数20,它只跟Son(int age)这个构造函数有关,与父类无关,结果son age:20 作者: 柳 德 彬 时间: 2013-4-1 13:10
首先,理解继承和构造方法的概念及用法,他们都有什么特征。而不是一味看结果。作者: 邵彩华 时间: 2013-4-1 17:32
class Father
{
class Son extends Father
{
Son()
{
//默认这里有一个东西 super();
//this(20);
System.out.println("son");
}
Son(int age)
{
super(age);
System.out.println("son age:"+age);
}
}
public class Test1 {
public static void main(String[] args) {
Son s = new Son(); //father;son
Son s1 = new Son(20);//father;son age:20
}
}
一、子类在构造的过程中必须调用父类的构造方法,若没有显示地调用,则系统默认调用父类的空构造方法;子类的构造方法也可以在用this关键字调用其他的构造方法,而其他的构造方法中必须调用了父类的构造方法。
二:对父类构造方法的引用,或对本类中其他构造方法的引用必须放在第一条语句,因为只有先构造出父类对象才能有子类像(调用父类构造方法的过程,实际上是在子类对象中构造了一个父类的对象)
三:执行过程如下:
a)Son s = new son(); 在创建对象s的过程中,先调用了 Son类中的Son()这个构造方法,该构造方法由于没有显示调用父类构造方法,所以就默认地首先调用父类中的Father()这个构造方法,实际上是在对象s中创建了一个父类对象,然后继续执行Son()方法中的打印语句,输出:son
b)Son s1 = new Son(20); 在创建s1的过程中,先调用了Son类中的Son(int age)这个构造方法,该方法中的super(age)语句时显示地调用了父类中的Father(int age)方法,该方法在对象s1的内存空间先建立了一个父类对象(若定义了成员变量,还会对成员变量进行默认初始化),并执行System.out.println("father age:"+age);打印出:father age:20
然后父类方法结束回到Son(int age)方法中继续执行System.out.println("son age:"+age);输出:son age:20
所以最后结果为:
son
father age:20
son age:20 作者: 梁志兵 时间: 2013-4-1 23:18
邵彩华 发表于 2013-4-1 17:32
class Father
{
嗯 谢谢你们的解答作者: C-STAL白鳍豚 时间: 2013-8-7 17:16
Son s = new Son();创建这个对象时,调用父类的 Father(){}方法,然后再执行子类的Son()方法;当Son s = new Son(20)方法构建时,遇到 super(age)调用父类的有参函数 Fahter(int age),因为传入的参数是20,所以父类和子类的年纪都是20.