title: "is not abstract and does not override abstract method" error
body: <p>I am getting this error and it is confusing me. I do not know how to fix it. I know there are some other errors in there but i'm not too worried about those for now.</p>
  
  <p>Here is the code:</p>
  
  <pre><code>import java.awt.*;
  
  public abstract class Shape {
  // Instance variables
  private int x;
  private int y;
  private Color color;
  
  // Constructor
  protected Shape(int x, int y, Color color) {
  this.x = x;
  this.y = y;
  this.color = color;
  }
  
  // Abstract methods
   public abstract void draw(Graphics g);
  public abstract int getHeight();
  public abstract int getWidth();
  public abstract void scale();
  public abstract double area();
  
  // Other instance methods
  public Color getColor() {
  return color;
  }
  
  public int getX() {
  return x;
  }
  
  public int getY() {
  return y;
  }
  
  public void move(int dx, int dy) {
  x += dx;
  y += dy;
  }
  
  public void setColor(Color color) {
  this.color = color;
  }
  
  public String toString() {
  return "Position: (" + getX() + ", " + getY() + ") Color: (" + getRed() + ", " + getBlue() + ", " getGreen() + ")";
  </code></pre>
  
  <p>}
     }</p>
  
  <p>Here are the class files:</p>
  
  <pre><code>// Represents a circle that can be displayed in a graphics
  // context
  
  import java.awt.*;
  
  public class Circle extends Shape {
  // Instance variables
  private int diameter;
  private double scaleFactor = 2;
  private double area;
  
  // Constructor
  public Circle(int x, int y, Color color, int diameter) {
  super(x, y, color);
  this.diameter = diameter;
  }
  
   // Instance methods
  public void draw(Graphics g) {
  g.setColor(getColor());
  g.fillOval(getX(), getY(), diameter, diameter);
  }
  
  public int getHeight() {
  return diameter;
  }
  
  public int getWidth() {
  return diameter;
  }
  
  public void scale(double scaleFactor) {
  (double) diameter *= scaleFactor;
  }
  
  public double area() {
  area = (3.14 * (diameter * diameter)) / 4;
  return area;
  }
  
  public String toString() {
  return "Diameter: " + diameter + "\nWidth: " + getWidth() + "Height: " + getHeight();
  }
  }
  
  import java.awt.*;
  
  public class Rectangle extends Shape {
  // Instance variables
  private int width;
  private int height;
  private double scaleFactor = 2;
  private double diameter = width * height;
  private double area;
  
  // Constructor
  public Rectangle(int x, int y, Color color,
                 int width, int height) {
  super(x, y, color);
  this.width = width;
  this.height = height;
  }
  
  // Instance methods
  public void draw(Graphics g) {
  g.setColor(getColor());
  g.fillRect(getX(), getY(), width, height);
  }
  
  public int getHeight() {
  return height;
  }
  
  public int getWidth() {
  return width;
  }
  
  public void scale(double scaleFactor){
  width *= scaleFactor;
  height *= scaleFactor;
  }
  
  public double area() {
      area = (3.14 * (diameter * diameter)) / 4;
      return area;
  }
  
  public String toString() {
      return "Diameter: " + diameter + "\nWidth: " + getWidth() + "Height: " +
  getHeight();
  }
  }
  </code></pre>
  
  <p>And here is the test file:</p>
  
  <pre><code>public class ShapeTest
  {
  public static void main(String[] args)
  {
      Color myC = new Color(10, 30, 20);
      Circle myCircle = new Circle(0, 0, myC, 5);
      Rectangle myRectangle = new Rectangle(0, 0, myC, 2, 3);
  
      System.out.println(myCircle.toString());
      System.out.println(myRectangle.toString()); 
  
  
  }
  }
  </code></pre>
  
  <p>Here are the errors:</p>
  
  <pre><code>javac ShapeTest.java
  ShapeTest.java:5: cannot find symbol
  symbol  : class Color
  location: class ShapeTest
      Color myC = new Color(10, 30, 20);
      ^
  ShapeTest.java:5: cannot find symbol
  symbol  : class Color
  location: class ShapeTest
      Color myC = new Color(10, 30, 20);
                      ^
  ./Shape.java:46: ';' expected
  return "Position: (" + getX() + ", " + getY() + ") Color: (" + getRed() + ", " +   getBlue() + ", " getGreen() + ")";
                                                                                                     ^
  ./Shape.java:46: not a statement
  return "Position: (" + getX() + ", " + getY() + ") Color: (" + getRed() + ", " + g etBlue() + ", " getGreen() + ")";
                                                                                                               ^
  ./Shape.java:46: cannot find symbol
  symbol  : method getRed()
  location: class Shape
  return "Position: (" + getX() + ", " + getY() + ") Color: (" + getRed() + ", " + getBlue() + ", " getGreen() + ")";
                                                                 ^
  ./Shape.java:46: cannot find symbol
  symbol  : method getBlue()
  location: class Shape
  return "Position: (" + getX() + ", " + getY() + ") Color: (" + getRed() + ", " + getBlue() + ", " getGreen() + ")";
                                                                                   ^
  ./Shape.java:46: cannot find symbol
  symbol  : method getGreen()
  location: class Shape
  return "Position: (" + getX() + ", " + getY() + ") Color: (" + getRed() + ", " + getBlue() + ", " getGreen() + ")";
                                                                                                    ^
  ./Circle.java:16: Circle is not abstract and does not override abstract method scale() in     Shape
  public class Circle extends Shape {
     ^
  ./Circle.java:43: unexpected type
  required: variable
  found   : value
  (double) diameter *= scaleFactor;
  ^
   ./Rectangle.java:3: Rectangle is not abstract and does not override abstract method scale() in Shape
   public class Rectangle extends Shape {
     ^
  10 errors
  </code></pre>