【问题标题】:Constructor overloading, how do i proceed?构造函数重载,我该如何进行?
【发布时间】:2020-01-06 13:39:13
【问题描述】:

在我的作业中,我们正在练习构造函数重载(在纸上)。我必须实现这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
    }
}

【问题讨论】:

  • 你的第二个构造函数也不正确,你甚至没有使用传递给它的Center c
  • 最后一个构造函数是必须使用给定参数分配类成员的地方。
  • 提示:Center 只不过是 x- 和 y-坐标。
  • 您的问题不在于如何重载构造函数。您的问题在于如何初始化“中心”
  • 请参考您的文本框,或使用一些在线资源,如this

标签: java constructor-overloading


【解决方案1】:

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

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); 
}

【讨论】:

  • 这不起作用,因为Center 从未初始化。
  • 第三个构造函数:由于方法不是静态的,我必须创建一个新的中心对象,然后我可以访问“中心”类中的 x 和 y 对吗?在第二个构造函数中,我们不需要创建一个新的 Center 对象,因为我们没有访问 Center 类。我们使用 c 是因为它来自“Center”类?谢谢,很有帮助。
  • 构造函数不是方法。是的,您必须创建一个对象才能访问 Center 的属性。
【解决方案2】:

类似这样的:

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;
}

【讨论】:

  • 假设这是作业,他不能修改Center类以包含(x, y)的构造函数,他很可能需要使用no-args构造函数new Center()并手动设置值因为他们是public。虽然您的解决方案是理想的。
【解决方案3】:

由于你的类已定义:

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

这里的重点是变量c属于Center类和变量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 变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多