package example type CEO interface { Manager deleteManager() IsCEO() } type ceo struct { Manager } func (p *ceo) deleteManager() { DeleteDirectorManager(p.Manager) } func (p *ceo) IsCEO() {} type overwrittenMethodsOnManager struct { p Manager } func NewCEO(name string) CEO { om := &overwrittenMethodsOnManager{} p := NewDirectorManager(om, name) om.p = p return &ceo{Manager: p} } func DeleteCEO(p CEO) { p.deleteManager() } func (p *ceo) GetPosition() string { return "CEO" }