I just want to point out to those who are reading through Chapter 5 on collections that the suggestion given for overriding the addItem method ( see page 107 ) violates the Liskov Substitution Principle for programming.
http://stackoverflow.com/questions/1...irtual-methods
So by having the sub-class CourseCollection requires an object of type Course, you are violating the aforementioned principle.