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

请教一个java基本问题
public class BaseSubDemo {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Base base=new Base();
Sub sub=new Sub();

}

}
class Base{
public Base(){
System.out.println("Base init !");
}
}
class Sub extends Base{
public Sub(){
System.out.println("Sub init !");
}
}
程序执行后为什么会有打印两个Base init?当创建子类实例的时候,父类之前不是已经加载进来了吗,为什么还会打印一个Base init?求教.

------解决方案--------------------
Base base=new Base(); --实例化Base对象,在后台打印一次Base的构造方法;
Sub sub=new Sub(); --实例化Sub对象,因为继承了Base,所以它必须要继承调用父类的构造方法,因而要打印一下那句,然后再把自己的给打印出来…………

------解决方案--------------------
结果正常!LZ,整个执行过程是这样的:
main()方法里第一个为:
Base base=new Base();
System.out.println("Base init !");
一条记录:Base init!
第二个:
Sub sub=new Sub();
注意它的类里会先默认调用super()[即先调用基类的构造方法];
所以是两条记录:Base init! 和Sub init!
共计三条记录。
LZ 可以把super()加进去,试一下!
------解决方案--------------------
public class BaseSubDemo {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Base base=new Base();
base.getInfo();
Sub sub=new Sub();

}

}
class Base{

public void getInfo(){System.out.println("Base init !");}

}
class Sub extends Base{
public Sub(){
System.out.println("Sub init !");
}
}
这样 就只有一个了