日期:2014-05-20  浏览次数:20793 次

this、super问题急求解
public class Test { 
    public static void main(String [] args) {         
     Child c = new Child();     
     } 
    } 

class Father { 
    public Father() {
        System.out.println("父类无参构造函数");     
    } 
    public Father(String name) { 
        System.out.println("父类有参构造函数");             
        } 
    } 
class  Child extends Father {      
public Child() {         
this("dd"); 
        System.out.println("子类无参构造函数");     

    public Child(String name) {         
     super("dd"); 
        System.out.println("子类有参构造函数");     
    } 
}
结果为什么是这样呢? 
------解决方案--------------------
public class Test
{
public static void main(String[] args)
{
Child c = new Child();   //第一步:生成对象,调用子类构造方法;
}
}

class Father
{
public Father()
{
System.out.println("父类无参构造函数");
}

public Father(String name)
{
//第四步:打印;
System.out.println("父类有参构造函数");
}
}

class Child extends Father
{
public Child()
{
this("dd"); //第二步,调用Child类的有参构造方法;
System.out.println("子类无参构造函数");
}

public Child(String name)
{
super("dd"); //第三步,调用父类的有参构造方法;
System.out.println("子类有参构造函数");
}
}

所以从最里层开始打印;
------解决方案--------------------
回答你这个问题前,先告诉你一个继承里面关于子父类各自的构造函数继承的问题,子类继承父类,子类的构造函数默认第一行是super()     如果你写了 this (X) 或者是 super(X)   其中里面的super(X) 是父类有参数构造,  那么它的默认的super() 就会被你写的覆盖了,   你这题是先创建一个子类对象,并且new Child();是无参数构造  ,他就会去找子类的无参数构造,结果执行第一行 发现了this(“dd”),就会调用本类的有参数构造,到了有参数构造中发现了super(“dd”)‘于是去找父类有参构造,打印了第一句,在打印子类有参构造,之后回到子类无参构造打印最后一句