// Example: Inheritance in OOP
// Vocabulary: Superclass, Subclass, inheritance
// Processing: extends, super(), super.XX
//
// Circles and Squares are types of Widgets
// So we define an abstratc class Widget with all attributes and methods
// common to all Widgets. Next we define two subclasses: Square, and Circle
// that are subclasses...to explore the concepts
// In this sketch, there are 10 Square objects and 10 Circles
// So we have a total of 20 Widgets
int N = 20;
Widget[] widgets;
void setup() {
   size(800, 800);
   // The widgets[] array holds Square as well as Circle objects
   widgets = new Widget[N];
   
   // Next create N/2 Square objects
   for (int i = 0; i < N/2; i++) {
      widgets[i] = new Square(random(width), random(height), random(20, 100));
   }
   
   // Next, create N/2 Circle objects
   for (int i = N/2; i < N; i++) {
      widgets[i] = new Circle(random(width), random(height), random(20, 100),
      color(random(255), random(255), random(255)));
   }
} // setup()
void draw() {
   background(255);
   for (Widget w : widgets) {
      w.display();
      w.jiggle();
   }
} // draw()