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

关于JAVA中继承的SUPER问题
在子类中的构造函数中使用super(a,b)是把父类的带参数的构造函数调用到子类来执行,还是在父类中执行这个构造方法?

请看下面的题目,我对输出的第2行和第4行有疑问
如果super(a,b)是把父类的构造函数调用在子类中运行那就应该是这个结果
所以我对super(a,b)后父类的构造函数到底在哪里执行有疑惑
哪位高手帮我讲解下了   谢谢


class   Point{  
protected   int   x,y;  
public   Point(int   a,int   b)  
{  
x=a;  
y=b;  
System.out.println( "point   constrator: "+this.tostring());  
}  
public   String   tostring()  
{return   "[ "+x+ ", "+y+ "] ";}  
}  
class   Circle   extends   Point  
{  
protected   double   radius;  
public   Circle(double   r,int   a,int   b)  
{  

super(a,b);  
radius=r;  
System.out.println( "circle   constrator: "+this.tostring());  
}  
public   String   tostring()  
{return   "center "+super.tostring()+ "radius= "+radius;};  
}  
public   class   test  
{  
public   static   void   main(String[]   args)  
{  
Circle   circle1,circle2;  
circle1=new   Circle(4.5,72,29);  
circle2=new   Circle(10.0,5,5);  
}  
}  
JAVA结果输出的是  
point   constrator:center[72,29]radius=0.0  
circle   constrator:center[72,29]radius=4.5  
point   constrator:center[5,5]radius=0.0  
circle   constrator:center[5,5]radius=10.0  

为什么不是  
point   constrator:[72,29]  
circle   constrator:center[72,29]radius=4.5  
point   constrator:[5,5]  
circle   constrator:center[5,5]radius=10.0




------解决方案--------------------
是this引用哪个对象的问题吧........this与super是用来区别是引用父类还是子类引用
------解决方案--------------------
在这里this.tostring()引用的是子类的tostring()方法
------解决方案--------------------
this是在super的基础上来构造的。你在extends的时候,其实这个类就已经拥有了super的很多东西。有一种很简单的理解,你可以把子类的super.getXxx()理解成把super的getXxx方法的方法体代码copy到这里来运行。