An interface is thus a type definition; anywhere an object can be exchanged (for example, in a function or method call) the "type" of the object to be exchanged can be defined in terms of one of its implemented "interface"s or base-classes rather than specifying the specific class. This approach means that any class that implements that interface can be used. For example, a dummy implementation may be used to allow development to progress before the final implementation is available. In another case, a fake or mock implementation may be substituted during testing. Such stub implementations are replaced by real code later in the development process.