title: Java: constructor Rectangle in class Rectangle cannot be applied to given types, even though the constructor method exists?
body: <p>The Rectangle class extends the ClosedShape class. When I try to create an instance of Rectangle, I get the compiler error:</p>
  
  <blockquote>
    <p>constructor Rectangle in class Rectangle cannot be applied to given
    types;<br>
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mine = new Rectangle (10, 50, 90, 50);<br>
        &nbsp;&nbsp;&nbsp;required: no arguments<br>
        &nbsp;&nbsp;&nbsp;found: int, int, int, int<br>
    &nbsp;&nbsp;&nbsp;reason: actual and formal arguments lists
    differ in length</p>
  </blockquote>
  
  <p>But the constructor I'm trying to call DOES exist!! Why might this be? See code below:</p>
  
  <p>ClosedShape.java:</p>
  
  <pre><code>import java.awt.Graphics;
  
  public abstract class ClosedShape extends Shape {
      boolean polygon;
      int numPoints;
      int[] xVertices;
      int[] yVertices;
      int x, y, width, height;
  
      public ClosedShape () {}
  
      public ClosedShape(boolean isPolygon, int numPoints) {
          super(0,0);
          this.polygon = isPolygon;
          this.numPoints = numPoints;
      }
  
      public ClosedShape(boolean isPolygon, int numPoints, int[] x, int[] y) {
          super(x[0],y[0]);
          this.polygon = isPolygon;
          if (isPolygon) {
              this.numPoints = numPoints;
              xVertices = new int[numPoints]; // error check?  if x.length == numPoints
              //for (int i = 0; i &lt; x.length; i++) { // make copy of array: why?
              //  xVertices[i] = x[i];
              //}
              yVertices = new int[numPoints]; // error check?  if y.length == numPoints
              for (int i = 0; i &lt; y.length; i++) { // make copy of array
                      yVertices[i] = y[i];
              }
          }
          else { // its an oval - define bounding box
              this.numPoints = 4;
              this.x = x[0];
              this.y = y[0];
              width = x[1];
              height = y[1];
          }
      }
  
      public void setXYCoords(int[] x, int[] y){
          this.xVertices = x;
          this.yVertices = y;
      }
  
      // Gives access to the width attribute
      public void setWidth(int width){
          this.width =width;
      }
  
      // Gives access to the height attribute
      public void setHeight(int height) {
          this.height =height;
      }
  
      public void draw(Graphics g) {
          if (polygon) {
              g.drawPolygon(xVertices, yVertices, numPoints);
          }
          else {
              g.drawOval(x, y, width, height);
          }
  
      }
  
      public abstract double Area();
      public abstract double Perimeter();
  }
  </code></pre>
  
  <p>Rectangle.java:</p>
  
  <pre><code>public class Rectangle extends ClosedShape {
  
      public void Rectangle(int x, int y, int width, int height) {
          super(true, 4);
      }
  
      public double Area() {
          return 0.0;
      }
  
      public double Perimeter() {
          return 0.0;
      }
  }
  </code></pre>
  
  <p>DrawingFrame.java (the tester class):</p>
  
  <pre><code>import java.awt.*;
  import javax.swing.Timer;
  
  public class DrawingFrame extends javax.swing.JPanel {
      public DrawingFrame (int w, int h) {
          setFocusable(true);
          setBackground(Color.black);
          setSize(w,h);
      }
  
      protected void paintComponent(Graphics g) {
          super.paintComponent(g);
  
          //tester  : Remove comments to test classes
          Shape mine;
          g.setColor(Color.red);
          mine.draw(g);
  
          mine = new Rectangle(10, 50, 90, 50);
          g.setColor(Color.yellow);
          mine.draw(g);
      }
  }
  </code></pre>
  
  <p>And here's Shape.java, in case you need it:</p>
  
  <pre><code>import java.awt.*;
  
  public abstract class Shape {
  
      int initX, initY;
      Color fillColour;
  
      public Shape() {
          initX = 0;
          initY = 0;
          fillColour = null;
      }
  
      public Shape(int x, int y) {
          initX = x;
          initY = y;
      }
  
      public void setInitX (int x) {
          initX = x;
      }
  
      public void setInitY (int y) {
          initY = y;
      }
  
      public abstract void draw(Graphics g);
      public abstract double Area();
      public abstract double Perimeter();
  }
  </code></pre>