Rather we draw on an instance of a subclass of Canvas, such as a FormCanvas or a PostscriptCanvas . Us computer types call those things a concrete subclass . Let me try to clarify this a bit. In other words, a concrete subclass instance is something we can sink our teeth into, in that it actually implements the behaviour specified by the abstract class. So the abstract class is basically there as a shell that tells its concrete subclasses what protocols the subclass has to implement.
Protocols is just fancy talkin'.
Well, think of it this way. When I want to draw to the screen, I draw to a bitmap called a Form . A Form is what we see on the screen. When I want to draw to a printer, I draw to a Postscript device. Postscript is another one of those things invented at Xerox Parc a long time ago that solved the problem of how to draw graphics to printers, independent of the type of printer you are talking to.