繁体   English   中英

Circle类的多个构造函数

[英]Circle class multiple constructors

我正在尝试将Circle类修改为包括第三个构造函数,该构造函数用于构造带有两个参数的Circle实例-用于半径的double和用于颜色的String。 还要修改主类以使用此构造函数构造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());


        }
    }

好吧,您没有使用它,因此该消息不足为奇。 只需在某处(例如, Circle c3 = new Circle(0.5, "Green"); )中调用两个参数的构造函数,该消息就会消失。 当然,如果将所有实例创建都更改为二参数构造函数,则将收到零参数和一参数版本的警告。

另外,您可以更改构造函数定义:

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

您可能还希望使用颜色enum ,以避免出现大小写差异(例如“红色”与“红色”)的问题。 您始终可以使用内置的enum方法name()valueOf(String)enum值和String之间进行转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM