Force students to explore inheritance and the Java APIs for ArrayList by writing code that HAS-A ArrayList or IS-A ArrayList.
Have students act out diagrams they create of the stack and heap to extend this common drawing exercise and help them strengthen their mental models.
Use Clock as an example of an abstract class because ALL clocks have the same mechanism for keeping time, a necessary property for an Abstract Class, to provide students with a strong real-world mental model for abstract classes.
Use Car as an example of an interface because students agree on the general behaviors of a car but can only come up with specific instantiations of cars, which provides students with a strong mental model for interface relationships.
Require students to refactor their code while keeping the output of their program exactly the same in order to challenge them to solve problems using a variety of strategies.
In anticipation of a relatively large project, assign smaller projects that include the programming concepts necessary for the large project.