当前位置: 首页 > 知识库问答 >
问题:

循环类多个构造函数

饶骁
2023-03-14

我正在尝试修改类Circle以包含第三个构造函数,用于构造具有两个参数的Circle实例——半径的双精度和颜色的字符串。还修改主类以使用此构造函数构造Circle的实例。我对此有困难,我一直收到从未使用构造函数Circle的消息。请查看代码

 public class Circle {
        private double radius;
        private String color;


        public Circle() {
            radius = 1.0;
            color = "red";
        }


        public Circle(double r) {
            radius = r;
            color = "Blue";
        }

        public Circle(double r, String c) {
            radius = r;
            color =c;
        }



        public double getRadius() {
            return radius;
        }

        public void setRadius(double newRadius) {
            radius = newRadius;
        }


        public String getColor()
        {
            return color;
        }

        public void setColor(String newColor) {
            color=newColor;
        }



        public double getArea() {
            return radius*radius*Math.PI;
        }
    }

    public class Main {

        public static void main(String[] args) {

            Circle c1 = new Circle();
            System.out.println("The circle has radius of " +     c1.getRadius());
            System.out.println("and area of " + c1.getArea());

            Circle c2 = new Circle(2.5);
            System.out.println("The circle has radius of " + c2.getRadius());
            System.out.println("and area of " + c2.getArea());


            Circle c3 = new Circle(0.5);
            c3.setColor("Green");
            System.out.println("The circle has radius of " 
            + c3.getRadius());
            System.out.println("and area of " + c3.getArea());
            System.out.println("color is: " + c3.getColor());




            Circle c5 = new Circle();
            c5.setRadius(500.0);
            System.out.println("radius is: " + c5.getRadius());
            c5.setColor("Yellow");
            System.out.println("color is: " + c5.getColor());


        }
    }

共有1个答案

暴乐邦
2023-03-14

嗯,您没有使用它,因此该消息应该不会令人惊讶。只需在某处插入对双参数构造函数的调用(例如,<代码>圆圈c3=新圆圈(0.5,“绿色”) ),消息应该消失。当然,如果您将所有实例创建更改为双参数构造函数,那么您将得到零参数和一参数版本的警告。

或者,您可以更改构造函数定义:

public class Circle {
    public Circle() {
        this(1.0, "red");
    }


    public Circle(double r) {
        this(r, "Blue");
    }

    public Circle(double r, String c) {
        radius = r;
        color = c;
    }
    ...
}

不过,我不得不说,当使用默认半径时,颜色的默认值是“红色”,而当指定半径时,颜色的默认值是“蓝色”,这很奇怪。我建议不要这样做,在这种情况下,我会将第一个构造函数更改为:

public Circle() {
    this(1.0);
}

您可能还想考虑对颜色使用枚举,以避免大小写差异问题(如“红色”与“红色”)。您始终可以使用内置的枚举方法(name()和字符串的值)在枚举值和字符串之间进行转换。

 类似资料:
  • 请帮我从这段代码中查找错误。我还是新手,我不知道这是否正确。我确实有一个错误。这就是错误:类Person中的构造函数Person不能应用于给定类型;super();^requiredent:String,String,String找到:没有参数原因:实际和正式参数列表长度不同这是我的代码: 编辑:如果我对Person和Address类都这样做。我只能有三个ARG构造函数。如何调用one-arg构造

  • 真的不可能在 dart 中为一个类创建多个构造函数吗? 在我的播放器类中,如果我有这个构造函数 然后我尝试添加这个构造函数: 我得到以下错误: 默认构造函数已定义。 我不是通过创建一个带有一堆非必需参数的构造函数来寻找解决方法。 有没有好办法解决这个问题?

  • 我知道数据类就像kotlin中的简单模型一样,默认情况下带有getter和setter,并且非常简单: 是否可以为该数据类声明第二个构造函数?

  • 说明: Worker::__construct([string $listen , array $context]) 初始化一个Worker容器实例,可以设置容器的一些属性和回调接口,完成特定功能。 参数 $listen 如果有设置监听$listen参数,则会执行socket监听。 $listen的格式为 <协议>://<监听地址> <协议> 可以为以下格式: tcp: 例如 tcp://0.0.

  • 我的问题是关于OOP(C)中的构造函数。当我在一个类中将默认构造函数定义为private,并且在main中将该类的一个对象初始化为default时,就会出现默认构造函数不可访问的错误。这很好。但我也在Public部分中使用默认参数构造函数,当我再次在main中初始化对象时,就会出现对函数重载的不明确调用。所以我的问题是,如果不能从main访问私有构造函数,那么编译器应该调用公共部分中的构造函数,这

  • C++ 类 & 对象 类的构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。 构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。 下面的实例有助于更好地理解构造函数的概念:#include <iostream> using namespace std; class Line { public: v