In reply to desperadorocks:
An interface class is just like you said in a. except an interface class only contains pure virtual methods. The benefit of using an interface class is that a class can implement multiple interface classes as well as being extended from a single abstract class.
In this example, you could specify the ObjectWrapper class as either an abstract class or virtual class and it would not make much difference. But doing it as an interface class gives you the option of specifying a class that extends from one class as well as implements another.
You should see this paper 8.2: Design Patterns by Example for SystemVerilog Verification Environments Enabled by SystemVerilog 1800-2012 – it won the best paper at this year’s DVCon
and check out the second best paper 5.1 SystemVerilog Interface Classes - More Useful Than You Thought