Since interface is actually a type, I always regard interface implementation as a special kind of inheritance mechanism, treating the interface as the base type and the type implementing it as a derived type. When an instance of the 'derived' type is created, the methods defined in the 'base' type, I mean the interface, are added into the method table, then the methods defined in this 'derived' type itself are added into the method table too. When there is a 'grandson' type, it will add all methods defined in its father and grandfather(the interface) declaration into its method table. Virtual methods can be overridden of course.
Is my interpretion correct? It seems not to make sense in this scenerio: What if the grandson implements the interface again? like:
interface IFather { void m(); }
class Son: IFather{}
class Grandson : Son, IFather{}
The Grandson
adds the methods in the interface into its method table twice?