Ano, má strukturální podtypový polymorfismus místo nominálního. Občas je to však také nevýhoda.
Jaké to má nevýhody? Že je složitější určit (pod)typ v úplně dynamických případech, kdy o objektu předem nic nevím?
První nevýhoda je, že při (náhodné) shodě rozhraní mohu omylem dávat instance jednoho rozhraní místo instancí druhého rozhraní, i když spolu vůbec nesouvisí. Lepší by IMO bylo, aby se muselo explicitně někam vypsat, co je podtyp čeho, a kompilátor by to zkontroloval a udělal z toho reflexivní tranzitivní uzávěr (neboť relace býti podtyp je předuspořádání).
Druhá nevýhoda je, že implementace jsou méně efektivní. Problém je v tom, že různé instance mohou mít různé metody a ten, kdo chce tyto metody volat, musí nějak zjistit jejich adresy. Např. OCaml to dělá tak, že během kompilace zahashuje jména všech metod, a když se má nějaká metoda zavolat, tak se v hashtabulce dané instance najde její adresa. Go to dělá tak, že při přetypování instance na nějaké rozhraní vygeneruje vtabulku pro dané rozhraní - pokud to nejde staticky, tak se to dělá za běhu. Haskell to dělá tak, že pro každou typovou třídu (cca rozhraní) udělá vtabulku a tyto vtabulky předává implicitně jako další argumenty společně s hodnotou.