You can see an abstract class like a generalization of (possibly) a set of concrete classes that inherit from it. When you design a domain model you should start abstracting (i.e. generalizing) common features. This generalization lends to the design of the abstract classes of the model. You could also implement methods that are meant to manipulate or handle abstract types (which, at runtime, will be eventually instances of concrete derived classes). For instance, imagine you whant to program a UI. You could need the concept of Component (an abstract class representing some object in your UI, but not necessarily visible). Then you could derive from Component the abstract class Control, which represents any visible component of the UI. Finally you'll have the concrete classes Textbox, Button, and so on, all deriving from the Control abstract class. Your UI class could have members meant to hold the references to the various Controls and Components. It will have methods meant to organize the various Controls (without knowing their concrete type, and delegating each concrete class to handle specific behaviours invoking virtual methods). All-in-all, abstract classes with virtual methods and polimorphism make programming more similiar to human thinking, keeping thinkgs neat and avoiding repetitive coding. You could also read something about OOP SOLID principles (Single Responsibility, Open-closed, Liskov Substitution, Interface Segregation and Dependency Inversion), for instance here.
EDIT (+)
On the contrary, interfaces are meant to describe sets of public methods. Interfaces are sort of a contract that a class have to follow (i.e. the class implementing an interface guarantees that it has all the methods described in the interface). For instance, you could have an interface IPlayable, which states that classes implementing it have to declare the methods Play() and Stop(). Then you could implement this interface in a DVDPlayer class, an MP3Player class and so on... whitout beeing obliged to inherit from base classes. You could also implement more than an interface in a single class, where multiple inheritance from classes is rarer (for instance, you can't have multiple inheritance neither in Java, nor in C#).