Интерфейсы позволяют избегать множественного наследования, грубо говоря. Но, не в этом суть. Интерфейс - это группа методов, которые определяют некоторое поведение. То есть, если класс реализует интерфейс - "наполняет" его методы содержанием, это значит, что он наделяется некоторыми способностями. Например, если класс реализует интерфейс Stack с методами push и pop, то он наделяется поведением стека (не смотря на то, что эти методы делают на самом деле, т.е. не обязательно объектами этого класса можно пользоваться, как стеком). Это позволяет абстрагироваться от класса, и отталкиваться только от того, реализует ли класс данного объекта определенный интерфейс или нет.