Несколько конструкторов класса Circle

#java

#java

Вопрос:

Я пытаюсь изменить класс Circle, чтобы включить третий конструктор для создания экземпляра Circle с двумя аргументами — double для radius и String для color . Также измените основной класс, чтобы создать экземпляр 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. Вы не используете перегрузку третьего конструктора Circle(double r, String c) .

Ответ №1:

Ну, вы его не используете, поэтому сообщение вряд ли должно быть сюрпризом. Просто вставьте вызов конструктора с двумя аргументами где-нибудь (например, 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);
}
  

Вы также можете рассмотреть возможность использования an enum для ваших цветов, чтобы избежать проблем с различиями в регистре (например, «красный» и «Красный»). Вы всегда можете преобразовать enum значение из an в a String , используя встроенные enum методы name() и valueOf(String) .