abstract class Message implements Classifiable { } class EmailMessage extends Message { public boolean isJunk() { return false; } }
interface Classifiable { boolean isJunk(); }
class FrodoMail { public static void main(String a[]) { Classifiable m = new EmailMessage(); System.out.println(m.isJunk()); } }
class SamMail { public static void main(String a[]) { EmailMessage m = new EmailMessage(); System.out.println(m.isJunk()); } }
假如我們重新實現Message,不再讓它實現Classifiable接口,SamMail仍能正常運行,但FrodoMail會拋出異常:java.lang.IncompatibleClassChangeError at FrodoMail.main。這是因為SamMail不要求EmailMessage是一個Classifiable,但FrodoMail卻要求EmailMessage是一個Classifiable,編譯FrodoMail得到的二進制.class文件引用了Classifiable這個接口名稱。符合Classifiable接口定義的方法仍然存在,但該類卻根本沒有提到Classifiable這個接口。