Task 1 ------ 1. By polymorphism, we are allowed to use an interface as the type of a variable, and to assign to that variable an instance of any class that implements that interface. The benefit of doing this is that it allows us to write code that will work with any implementation of the interface. If we want to change the implementation that we're using, the only thing we need to change is the expression that constructs the object. This type of polymorphism also allows us to: * write methods that can operate on any implementation of the interface * have collections that store instances of any implementation of the interface -- for example: List[] mylists = new List[10]; mylists[0] = new ArrayList(10); mylists[1] = new LLList(); ... 2. {world!, are, you?, how, hello} 3-4. see separate ListClient.java file