1.The base class describes and implements a group of related types sharing behavior. An interface defines a group of atomic functions for other unrelated types. Both of them are useful, but their use is different. An interface is a contract-based design: a type that implements an interface must provide the method implementation agreed in the interface. Abstract base classes provide a shared abstraction for a group of related types. Use the class hierarchy to define related types, use interfaces to expose functions, and implement these interfaces for different types.
2.Sometimes, using interfaces can also help us avoid the cost of struct unpacking. When we pack struct, The boxed object actually supports all interfaces supported by struct. When you use an interface pointer to access the struct, you do not have to unpack it to access internal data.