Java接口实现对象?

Java接口实现对象?,java,Java,是否有任何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

是否有任何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

}
publicstaticstring[]sizeSort(String[]sa){
比较器c=新比较器(){
公共整数比较(字符串a、字符串b){
如果(a.length()>b.length())返回1;
如果(a.length()
即使我并没有实现这个接口的equals方法,它仍然工作得很好。
你的回答澄清了这一点。但是有人知道上面是匿名本地内部类还是命名本地内部类吗?

java.lang.Object不是接口,所以没有接口会隐式实现它


然而,您创建的任何实现任何接口的类都将扩展对象,因为所有类都必须扩展它。因此,您(或任何其他人)可以创建的任何实例都将在java.lang.Object上定义所有方法。

严格来说:您如何知道它们之间的区别?
您将永远不会有对接口的引用,您将始终有对具有
对象的实际实例的引用,并实现该接口。这意味着您可以在任何引用(当然不是
null
)上从
Object
调用方法,即使所声明的引用类型是一个接口。

Object
是一个类,而不是一个接口,因此它不能由其他接口“实现”

接口的关键在于它不包含任何实现细节。如果一个接口可以扩展一个类,那么它将继承该类的实现细节,这将违背这一点。引用:

如果接口没有直接的 超级接口,然后接口 隐式声明公共摘要 成员方法m,签名为s, 返回类型r,并抛出子句t 对应于每个公共实例 方法m,带签名s,返回类型 r、 并抛出在中声明的子句t 对象,除非使用相同 签名、相同的返回类型和 compatible throws子句是显式的 由接口声明。如果接口显式 在case中声明这样一个方法m 其中,m被宣布为 反对


请注意,
Object
有许多最终和受保护的方法,所有接口都以这种方式“继承”,并且您不能在接口中使用这些修饰符(这将由您的“implements java.lang.Object”暗示)。

但是您声明的引用类型可以是接口,那么您为什么可以调用equals()当它不是接口的一部分时?因为java知道它是<代码>对象< /代码>,这个问题似乎是java如何确切地知道它。它是匿名的内部类,因为它没有名字。下面有一些不错的答案,考虑一下:<代码>类X{} /COD> >不需要定义<代码>等于< <代码> >;为什么?对于实现接口的匿名类也是如此:所有未显式扩展另一个类的类声明都隐式扩展对象(因此所有类直接或间接扩展对象)。+1有趣的摘录/查找。我不知道JLS将对象契约“升级”为接口。我猜这是为了能够讨论这些方法的“隐藏”而明确指定的。+1这很有趣,它也有意义,否则如何在接口上调用hashCode?