Интерфейсами очень хорошо реализовывать какие-либо слушатели или коллбеки для использования их значений извне.
Например:
public class MyClass {
private String mess = "";
private MyListener listener;
public MyClass () {
mess = "Успешно";
}
public void addListener (MyListener listener) {
this.listener = listener;
}
public void connect () {
listener.onSuccess (mess); // Какое-либо действие в случае успеха, например, подключение к серверу
}
}
interface MyListener {
void onSuccess (String mess);
void onError (int code);
}
Теперь его можно вызвать следующим образом:
MyClass myClass = new MyClass ();
myClass.addListener (MyListener () {
@Override
public void onSuccess (String var1) {
System.out.println (var1); // var1 имеет значение "Значение", которое мы получили в конструкторе класса MyClass. А тут с ней можно делать что угодно, например, слать HTTP-запросом куда-либо дальше.
}
});
myClass.connect ();
Просто и наглядно. Еще удобно их пользовать для описания методов каком-либо классе, чтобы другим программерам было удобнее копаться в чужом коде.