Create and implement a class hierarchy

You want to create a hierarchy of types because you have some implementation code you want to share between all types. You also have some method signatures you want to share. What should you use?

An interface
A class with virtual methods
An abstract class
A sealed class