class Pun
{
Pun ()
{
System.out.println("调用了构造函数Pun");
}

}
class Hed extends Pun{
Hed ()
{  super();
System.out.println("调用了子类的构造函数");
}
}
public class T7 { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
    Hed hed =new Hed();
}}
看上面的代码
我想问的是 当new Hed()的时候应该运行的是 初始化父类的构造函数 —>初始话子类的构造函数  ,因为在子类中遇到super(),导致调用 父类的构造函数 ,那样的话 输出的结果 应该是  调用了构造函数Pun  调用了构造函数Pun  调用了子类的构造函数  但是为什么结果不是那样子的?

解决方案 »

  1.   

    super(); 这句话即使你不写,在编译时
    也会自动加上,而且肯定是第一行,Hed () 
    {  super(); // 当运行Hed的构造函数时,在这里只会调用一次父类Pun的构造函数
    System.out.println("调用了子类的构造函数"); 


      

  2.   

    调用了构造函数Pun
    调用了子类的构造函数
    你的结果不是这样的吗?代码没问题的
      

  3.   

    先要弄清楚是怎样初始化父类的,并不是平白无故的就能初始化父类,你不写super(); 
    java也会默认帮你写上super()调用父类无参的构造方法
    你把父类的构造方法写上参数再把super()去掉,编译就通不过了。
      

  4.   

    构造函数就是构造对象,如果调用两次那不等于构造了两个对象,所以这里super()写不写都一样
    super()一般用于调用有参构造无参的就可以免了
      

  5.   


    class Pun 

    Pun () { 
    System.out.println("调用了构造函数Pun"); 
    } } 
    class Hed extends Pun{ 
    Hed () {  
    //super(); //这句你是显示地调用了super,如果你去掉这句,依然是打印一句调用了构造函数Pun。
    System.out.println("调用了子类的构造函数"); 


    public class Test {  /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
    // TODO Auto-generated method stub 
        Hed hed =new Hed(); 
    } } 
    如果你不显示地调用,系统会自动去调用那个无参的构造函数,如果你显示地调用了,就只调用一次了。不知道我讲得明不明白
      

  6.   

    首先:
    你要明白就算你不添加该类的构造函数。
    系统也会给你加上一个隐式的构造函数。
     class test
    {   //系统默认的构造函数格式,你是看不见的,但确实存在。
        public void test()
        {
           super();
        }
    }
    但是你要是自己构造了一个构造函数,系统就不会为你添加上面的构造函数了。比如:
     class test
    {   //这个是你自己写的构造函数。
        public void test()
        {
           /*这个你也可以自己添加。就算你不加,系统也会默认帮你加上。
            super();*/
        }
    }
      

  7.   

    你可以这么写试试
    public class test1
    {
    public void test1()
    {
    System.out.println("父类的构造函数运行1次");
    }
    }public class test2 extends test1
    {
    public void test2()
    {
    System.out.println("子类构造函数的运行");
    }}
    然后你自己在父类、子类里 构造对象,看看怎么运行的。
      

  8.   

    上面的修改下
    public class test2 extends test1 

    public void test2() 
    { this();
    System.out.println("子类构造函数的运行"); 

    }