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

关于类的继承调用问题

class A
{
int x,y;
A(int xx,int yy)
{
x=xx;
y=yy;
System.out.println("A"+x+","+y);
}
}
public class B extends A
{
A b=new A(1,2);
B(int x, int y) 
{
super(3,4);
this.x=x*x;
this.y=y*y;
System.out.println("B");
}
A a=new A(7,8);
public static void main(String[] args) 
{
int x=10,y=20;
A a=new B(x,y);
}
}

输出的顺序是
A3,4
A1,2
A7,8
B
想请教一下为什么这里最后才输出B,上面的调用顺序是怎么样的

------解决方案--------------------
对象的实例化顺序是先执行类中成员变量,再执行构造函数,如果有父类的话,在这之前又要最先实例化父类,怎么知道有没有父类,就看是否调用super函数了。
其实如果不显示的调用super函数,构造函数也是会调用默认的无参函数super(),
所以如果父类中没有无参的构造函数,子类中的构造函数是必须要显示的调用有参的super函数的。