In return, the interface guarantees that other conditions will be true when the method is complete. For example, if you have an interface for framing a house, one set of preconditions would be that the foundation has been poured, cured, and is correct for the given set of plans. An interface might also have invariants. In our example, the houseframing interface guarantees that throughout its lifetime it won't modify the blueprints, and it requires that the blueprints not be modified by anyone else. An interface is the complete opposite of a concrete class.
Classes can have public, protected, and private methods.
Interfaces are restricted to public methods. Interfaces can only have final members, and they too must be public. In my experience, abstract classes are best suited to class frameworks where the framework provider wants you to provide an implementation for one or more methods, without making those implementations public. If the framework requires that your class implement an interface, then the methods all have to be public. Remember that even an abstract class can implement an interface.