在子类中的构造函数中使用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到这里来运行。