A class can provide a set of capabilities—a contract, that is—by implementing an interface, which is a set of method declarations and constants. Note that the methods are only declared, not defined; that is, an interface defines a type consisting of abstract methods, where those methods are implemented by client classes as they see fit. An interface allows unrelated classes to implement the same facilities with the same names and types without requiring those classes to share a common base class.
Interface types are described in $$.
See the discussion of type refinement.