When is it appropriate to use abstracts as opposed to interfaces to define base class behavior? What is the most common, practical usage for each? For instance, if I were to write a database applications that required to read a wide variety of database formats, would I define by database classes as abstracts or interfaces?