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.)