Для чего до реализации класса определять интерфейс?
Попробуйте для себя написать простенькую программу, которая будет рисовать разные фигуры (квадрат, эллипс, ромб) на экране.
Вскоре вы обнаружите, что постоянно писать:
for (Square s: squares) {
  s.draw();
}
for (Ellipse e: ellipses) {
  e.draw();
}
for (Diamond d: diamonds) {
  d.draw();
}
...
довольно неудобно, особенно если потом понадобится добавить еще фигуры. Куда лучше будет объявить общий для фигур интерфейс с методом draw() и использовать в коде именно его:
for (Figure f: figures) {
  f.draw();
}
Ну хотябы вот пара причин:
1) При проектировании вы сначала думаете, что должен делать класс, и лишь потом как, отсюда сначала делается интерфейс, потом класс.
2) Для меньшей связанности системы, вы можете везде где возможно общаться с интерфейсом, и потом без проблем подставить другой класс.

На самом деле причин гораздо больше, тут советую почитать какие-нибудь книги по программированию (именно по программированию как таковому, а не по какому-то языку), там это хорошо объясняется.