首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

请问一个java基本有关问题

2012-02-19 
请教一个java基本问题public class BaseSubDemo {/** * @param args */public static void main(String[]

请教一个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 !");
}
}
这样 就只有一个了

热点排行