[英]Java Interface implements Object?
是否有任何Java接口隱式實現java.lang.Object?
當我做這樣的事情時出現了這個問題:
public static String[] sizeSort(String[] sa) {
Comparator<String> c = new Comparator<String>() {
public int compare(String a, String b) {
if (a.length() > b.length()) return 1;
else if (a.length() < b.length())
return -1;
else
return 0;
}
};
// more code
}
它工作正常,即使我沒有實現此接口的equals方法。 你的答案清除了這一點。 但有人知道上面是匿名本地內部類還是命名本地內部類?
有點。 引用Java語言規范 :
如果接口沒有直接的超接口 ,則接口隱式聲明一個公共抽象成員方法 m,其中包含簽名s,返回類型r和throws子句t, 對應於具有簽名s的每個公共實例方法 m,返回類型r和throws子句t 在Object中聲明 ,除非接口顯式聲明具有相同簽名,相同返回類型和兼容throws子句的方法。 如果接口在將對象聲明為m的情況下顯式聲明了這樣的方法m,那么這是一個編譯時錯誤。
請注意, Object
有許多final和protected方法,所有接口都以這種方式“繼承”,並且您不能在接口中使用這些修飾符(這將由您的“implements java.lang.Object”隱含)。
java.lang.Object不是接口,因此沒有接口會隱式實現它。
但是,您創建的任何實現任何接口的類都將擴展Object,因為所有類都必須擴展它。 因此,您(或實際上任何其他人)可以創建的任何實例都將具有在java.lang.Object上定義的所有方法。
Object
是一個類,而不是一個接口,因此它不能被其他接口“實現”。
接口的重點是它不包含任何實現細節。 如果一個接口可以擴展一個類,它將繼承該類的實現細節,這將破壞這一點。
嚴格來說:你怎么知道它的區別? 您永遠不會有對接口的引用,您將始終使用Object
作為實際實例的引用並實現接口。 這意味着您可以在任何引用上調用Object
方法(當然不是null
),即使引用的聲明類型是接口也是如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.