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

java中类初始化有关问题

2013-11-15 
java中类初始化问题package testpublic class A {public A(){System.out.println(this is a empty const

java中类初始化问题
package test;

public class A {

public A(){
System.out.println("this is a empty constructor");
}

public A(int i){
System.out.println("this is unempty constructor");
}

public static void main(String[] args){
B b = new B();
}

}

class B extends A{

public B(){
this(1);
}

public B(int i){
super(3);
System.out.println("hah");
}


}
这是一个很神奇的问题,在子类的构造方法中,必须调用父类的构造方法(如果不写的话,默认调用空方法),那么现在这个问题怎么解释呢?····B类中空的构造方法里面没有调用父类的构造方法,new B()的时候,应该先调用父类的构造方法,然后再调用子类的构造方法,那么应该调用A类无参的构造方法吧?···然后B类的构造方法执行之后,然后再执行B类的构造方法,那么这个时候,应该又调用了父类的构造方法super(3)。这个明显是不对的,但到底该怎么解释呢?·· java类的初始化
[解决办法]
java的语法规定  不可在同一个构造方法中,不可同时出现  super(参数列表)和this(参数列表)

public B(){
this(1);
}

这段代码不会调用super()

因此  你的代码执行顺序是
  
this(1);
super(3);
public A(int i){
System.out.println("this is unempty constructor");
}
System.out.println("hah");

热点排行