# Unit 7 – Demo Basic: Shape, Circle, Rectangle

A shape is an idea, not a thing you can hold — you cannot have "a shape," 
only a circle, a rectangle, or some other specific kind. Every shape still 
has an area and a perimeter, no matter which kind it is.

## Setting up

1. Compile `Shape`, `Circle`, and `Rectangle`.
2. Try to create a Shape object directly — BlueJ will not allow it.

## Experimenting

3. Create a Circle: `Circle("red", 5.0)`.
4. Call `area()` — returns the computed area.
5. Call `describe()` — returns a string with the colour, type name, area, 
   and perimeter.
6. Create a Rectangle: `Rectangle("blue", 4.0, 6.0)`.
7. Call `describe()` on the rectangle — same inherited method, different 
   formulas.

## What to look at in the code

8. Shape declares `area()` and `perimeter()` with no body — every 
   subclass must supply them or the code will not compile.
9. `describe()` is written once in Shape and calls `area()` and 
   `perimeter()`, which resolve to the subclass implementations at runtime.
10. Circle and Rectangle both use `override fun` with expression bodies 
    (`= ...`) to supply the formulas concisely.
