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

//关于super调用构造函数,为什么不成功,请各位进来看看.
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的构造函数
**********************************************************************************/

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



------解决方案--------------------
你的程序就应该是这样的结果,你的super()调用的是无参数的构造函数。

实例化一个类的时候,系统会检查是否有构造函数,如果没有系统产生一个默认的构造函数,如

果定义了构造函数,系统就不会产生默认的构造函数了。
------解决方案--------------------
没有参数的构造函数,子类会自行调用,不需要写super();
如果base class 的构造函数带有参数,则在子类的构造函数中一定要调用super(param)

你的结果很正常!
------解决方案--------------------
结果的确是那样
和书上写的 一样