The first two work, the last two don't. In the last two, Java can't decide which add() method is appropriate, since it doesn't look at the actual class of the arguments, but only at the declared class. In contrast, we have seen throughout the course that Java does look at the actual class of the receiver object. This is what it means to use single-dispatch.