# Unit 7 – Advanced Practice: Instrument, Guitar, Drum, Piano, Band

The basic practice built the instrument hierarchy — Guitar, Drum, and 
Piano each know their own sound and how they are played. This practice 
adds a Band that can hold any mix of those instruments and perform them 
all in sequence.

## Instructions

### Instrument

1. Look at `sound()` and `describe()` — can Instrument itself know what 
   to return? What needs to change so that every subclass is forced to 
   provide its own version? Should the class itself change too?
2. Complete `play()` so it returns a one-line string combining the 
   instrument's name, how it is played, and the sound it makes. Expected 
   format: `"[Acoustic Guitar] plucked or strummed → Strum!"`

### Guitar

1. Implement the method that returns the sound a guitar makes.
2. Implement the method that describes how a guitar is played.

### Drum

1. Implement the method that returns the sound a drum makes.
2. Implement the method that describes how a drum is played.

### Piano

1. Implement the method that returns the sound a piano makes.
2. Implement the method that describes how a piano is played.

### Band

1. A band grows over time as musicians join — add the storage it needs.
2. Implement `add()` so an instrument can join the band.
3. Implement `size()` to report how many instruments are in the band.
4. Implement `perform()` so every instrument plays in the order it joined.

### Testing

1. Try to create an `Instrument` directly — BlueJ should refuse.
2. Create `Guitar("Acoustic Guitar")`, `Drum("Bass Drum")`, and 
   `Piano("Grand Piano")`.
3. Call `play()` on each.
4. Create a `Band`.
5. Call `add()` with the guitar, then the drum, then the piano.
6. Call `size()` — should return 3.
7. Call `perform()` — all three instruments play in order.
