构造函数重载,我该如何进行?

Constructor overloading, how do i proceed?

在我的作业中,我们正在练习构造函数重载(纸上)。我必须实现这 3 个构造函数(填写)并且主构造函数必须生成一个坐标为 (0,0) 且半径为 1 的圆。我已经尝试实现前两个构造函数,但不知道是什么在第三个构造函数中做。一如既往地感谢你们的帮助。

public class Center
{
    public double x;
    public double y;
}

public class Circle
{
    private Center c;
    private double radius;

    public Circle()
    {
        this(0, 0, 1); //TO-DO
    }

    public Circle(Center c, double radius)
    {
        this(0, 0, radius); //TO-DO
    }

    public Circle(double x, double y, double radius)
    {
        //TO-DO
    }
}

您必须在此处将值分配给各个变量:

public Circle(double x, double y, double radius) {
    this.c = new Center();
    this.c.x = x;
    this.c.y = y;
    this.radius = radius;
}

你的第二个构造函数应该是这样的:

public Circle(Center c, double radius){
    this(c.x,c.y,radius); 
}

像这样:

public Circle() {
    this(0,0,1); 
}

public Circle(Center c, double radius){
    this(c.x, c.y,radius); //you need to use the center's coordinates
}

public Circle(double x, double y, double radius) {
    this.c = new Center(x, y);
    this.radius = radius;
}

由于您的 class 定义为:

public class Circle {
    private Center c;
    private double radius;
    ...
}

这里的重点是变量c是classCenter和变量radius是原始类型double ,您需要同时定义两者。

如您所见,第三个构造函数为您提供了三个变量:xyradius。这三个可以与 cradius 匹配的唯一方法是:

public Circle(double x, double y, double radius) {
    c = new Center(x, y);
    this.radius = radius; //here you must use `this` reference to avoid
    //collision between the radius variable from the class and its 
    //counerpart from the constructor.
}

在这个构造函数中,我们创建了一个新的Center来满足c变量,我们把xy放在那里,因为它在声明中需要Center 构造函数。我们还分配 radius 变量。