Adding a member to an interface does not break compatibility with pre-existing binaries.
Deleting a member from an interface may cause linkage errors in pre-existing binaries. If the example program:
interface I { void hello(); }
class Test implements I {
public static void main(String[] args) {
I anI = new Test();
anI.hello();
}
public void hello() { System.out.println("hello"); }
}
is compiled and executed, it produces the output:
hello
Suppose that a new version of interface I is compiled:
interface I { }
If I is recompiled but not Test, then running the new binary with the existing
binary for Test will result in a NoSuchMethodError. (In some early implementations of Java this program still executed; the fact that the method hello no longer
exists in interface I was not correctly detected.)