Interfaces define a contract; abstract classes provide a base with implementation.
In Java, interfaces are used to define a contract that a class must follow, which allows multiple inheritance of type. Meanwhile, abstract classes can hold both implemented methods and abstract methods that require a subclass to provide specific behavior, making them ideal for sharing base logic. For instance, when designing a payment processing system in an e-commerce project, an interface could define 'processPayment', while an abstract class could provide common logic such as 'validatePayment' that is shared across different payment methods.