Start here. This is the direct spoken answer to practice first.
Overview
Both can define polymorphic behavior, but they express different relationships and provide different implementation tools.
I use an interface when I want to define a capability or contract that otherwise unrelated classes can implement. A class can implement multiple interfaces. I use an abstract class when implementations share a meaningful base identity, common state, protected behavior, or construction rules. A class can extend only one class. Interfaces can have default and static methods, but they do not own per-instance state, so they are not a complete substitute for a shared base implementation.