Esses são os códigos usados na minha apresentação sobre Interfaces e Injeção de Dependências. Como você pode ver, o código não tem nada de mais, ele só dá foco no princípio D de SOLID que diz:
High-level modules should not depend on low-level modules. Both should depend on abstractions.
Fique a vontade para ler também o post que fiz a respeito desse tema no meu blog no Medium: https://jeanjmichel.medium.com/o-que-são-interfaces-em-orientação-a-objetos-e-por-que-está-ligado-a-injeção-de-dependências-d9c6bf7fbeb1