Скажем, у нас есть два класса: Tiger и Aeroplane.
Одна вещь, общая для этих двух типов - скорость. Я знаю, что было бы нелогично создавать суперкласс ClassWithSpeed, а затем выводить из него подклассы Aeroplane и Tiger.
Вместо этого лучше создать интерфейс, содержащий метод speed(), а затем реализовать его в Aeroplane и Tiger. Я понимаю. Но мы можем сделать то же самое без интерфейсов. Мы могли бы определить метод speed() в Aeroplane и метод speed() в Tiger.
Единственным (возможно, очень большим) недостатком было бы то, что мы не смогли бы "достичь" объектов Tiger и Aeroplane через ссылку на интерфейс.
Я новичок в Java и OOP, и я был бы очень благодарен, если бы кто-то объяснил мне роль интерфейсов. Ура!