A class that implements an interface must provide bodies for all methods of that interface. Also, I expect that an abstract class can choose to implement part of an interface leaving the rest for non-abstract subclasses. I can't find this in the documentation, however. Anyone that needs to know can, of course, construct a simple example and try it to see if the compilers accept it. The usefulness of interfaces goes far beyond simply publishing protocols for other programmers.
Any function can have parameters that are of interface type.
Any object from a class that implements the interface may be passed as an argument. One can apply bar to a Vector and a Polynomial, since Polynomial implements Comparable. Dynamic Binding assures that the actual class methods for the object passed will be applied. Other instance methods of objects passed, such as the multiply method from Polynomial cannot be used within bar . Therefore the bar function is polymorphic in its second parameter as many actual types may be passed for this value.