簡體   English   中英

Java接口實現了對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM