public class aa
{
aa()
{
System.out.println("aa的构造函数");
}
}
class bb extends aa
{
bb()
{ super();
System.out.println("bb的构造函数");
}
public static void main(String args[])
{
bb t=new bb();
}
}/*********************************************************************************
看了好多的书都说:"当你创建一个子类的实例时,首先会调用父类的构造函数,再调用自身的构造函数"
像我上面的这个程序,如果按书上所说应该输出:
aa的构造函数
aa的构造函数
bb的构造函数
可是却输出了这样意想不到的结果如下:
aa的构造函数
bb的构造函数
**********************************************************************************/

解决方案 »

  1.   

    你如果这样写  b的构造函数
    bb(){
         System.out.println("bb的构造函数");
      }
    其实和
    bb()
    { super();
    System.out.println("bb的构造函数");
    }
    是一样的系统默认给你加上 super() 也就是说会默认先调用父类的构造函数
    这也就是你看到的书上会写"当你创建一个子类的实例时,首先会调用父类的构造函数,再调用自身的构造函数"
      

  2.   

    你的程序就应该是这样的结果,你的super()调用的是无参数的构造函数。实例化一个类的时候,系统会检查是否有构造函数,如果没有系统产生一个默认的构造函数,如果定义了构造函数,系统就不会产生默认的构造函数了。
      

  3.   

    没有参数的构造函数,子类会自行调用,不需要写super();
    如果base class 的构造函数带有参数,则在子类的构造函数中一定要调用super(param)你的结果很正常!