Righto! First of all you have an abstract class Instrument. What this says is I am a class that cannot be instantiated and anyone who inherits from me must use the methods that I have declared in me.
What you have delared here is only a declaration of an array of Instruments of size 5. You have not instantiated the object itself (yet!).
Instrument4 orchestra = new Instrument4;
Next you have a lot of implementations of your abstract class. Wind4, Percussion4 and Stringed4 these inherit from Instrument are not abstract themselves because they declare all the methods in Instrument so it's fair enough to instantiate these classes.
orchestra[i++] = new Wind4()
if you look at what is being said here it's the same as
Instrument4 orchestra = new Wind4();
without the array stuff to worry about which is really just decaring a new Wind4 and assigning it to orchestra. orchestra is of type Intrument4 so we can assign a Wind4 to it because Wind4 subclasses (inherits from) Instrument.
Now the orchestra[i++] bit is just saying because orchestra is actually an array of Instrument4s that you are assigning Wind4 to that index of the array. Phew! Sorry for the long winded (no pun intended) answer but hope that helps Barry