public abstract class Shape {
  public abstract double area();           // metody abstrakcyjne
  public abstract double circumference();  // zwróć uwagę na średnik zamiast treści
}

class Circle extends Shape {
  public static final double PI = 3.14159265358979323846;
  protected double r;                              // dane egzemplarzowe
  public Circle(double r) { this.r = r; }          // konstruktor
  public double getRadius() { return r; }          // metoda dostępowa
  public double area() { return PI*r*r; }          // implementacja
  public double circumference() { return 2*PI*r; } // metod abstrakcyjnych
}

class Rectangle extends Shape {
  protected double w, h;                 // dane egzemplarzowe
  public Rectangle(double w, double h) { // konstruktor
    this.w = w;  this.h = h;
  }

  public double getWidth() { return w; }              // metoda dostępowa
  public double getHeight() { return h; }             // kolejna metoda dostępowa
  public double area() { return w*h; }                // implementacja
  public double circumference() { return 2*(w + h); } // metod abstrakcyjnych
}
