Один интерфейс:
interface Animal {
Свойства и методы, например
speak()
}
Множество реализаций:
class Dog implements Animal {...}
class Man implements Animal {...}
Реализация метода speak у классов может отличаться, но в коде бы будем работать с интерфейсом, что позволит заменять конкретные реализации при необходимости.
//Где-то в коде
zastavitGovorit(animal: Animal) {
animal.speak()
}
В функцию заставить говорить может быть передана любая реализация Animal, и код будет работать независимо от того какая именно реализация была передана. + Мы можем в любое время добавить новые реализации помимо Man и Dog, т.е. система будет легко расширяться.
Отстойно объяснил, но в инете уже достаточно примеров погугли, там и на кошечках с собаками и на трансформерах с дельфинами, я даже хз что тебе ещё надо.