public interface AA{
    public static final String value = "123456";
}
public class B implements AA{
@Override
public boolean equals(Object obj){
    if(obj==null)
        return false;
    if(this==obj)
        return true;
    if(!this.className().equals(obj.className()))
        return false;
    B b = (B)obj;
    if(this.value.equals(b.value))
        return true;
    return false;
    }
}
测试这样写:
public static void main(String[] args){
    AA a = new B();
    AA b = new B();
    System.out.println(a.equals(b));
}
编译和运行都没错,控制台打印true;
但是a和b 都是AA接口类型的引用,JAVA编译的时候虚似调用要检测AA类型里有equals()方法才能正常编译。
这就说明AA接口里有euqals()方法,这说明接口也继承Object。
大虾们帮解释下

解决方案 »

  1.   

    不对.
    这个类public class B implements AA默认还是要继承自Object类.
    对接口AA和类B的class文件分别反编译可以看的出来,在class文件里,B会自动加上extends java.lang.Object,而接口不会.
      

  2.   

    一个类去实现接口,在实现这个接口之前就已经有equals()方法了
      

  3.   

    但是指向它的引用是接口类型的呀,在编译的时候要先检测引用类型里是否有equals()方法才能正常通过编译。
    就如:
    public class B{
        public void method(){
            System.out.println("class B method()!");
        }
    }
    如果A是这样的:
    public classA extends B implements A{
        
    }
    那么
    AA a = new classA();
    则a.method();通过不过编译;
    a.equals();就能通过编译;
      

  4.   

     
     
    但是指向它的引用是接口类型的呀,在编译的时候要先检测引用类型里是否有equals()方法才能正常通过编译。 
    就如: 
    public class B{ 
        public void method(){ 
            System.out.println("class B method()!"); 
        } 

    如果A是这样的: 
    public class A extends B implements AA{ 
        

    那么 
    AA a = new classA(); 
    则a.method();通过不过编译; 
    a.equals();就能通过编译;
      

  5.   

    这可能是java本身提供的特殊支持吧。
    因为从语法上讲,interface 可以extends 其他的接口,但是不能extends别的类。
      

  6.   

    well, remember everything is an Object.put it in another way, you don't get an Object of a type of a "pure" interface. Conversely, you always get an Object first, then you are able to add other interfaces onto it.So:AA a = new classA(); dose not mean "a is a 'AA' but not an Object". In fact, a is an Object itself, and at the same time a is a "AA" as well.
      

  7.   

    object类 是基础类里面本来就有10种基础方法 其中包括toString()和equals()方法等其他一些方法 
    接口中不存在任何方法  接口也没有对象  你说的接口对象只是引用类的对象而已。所以有equals()方法
      

  8.   

    所有类都是Object类,所以都有equals()方法,但是此equals()方法与彼equals()方法含义是不一样的。也就是说在java中,并不是所有的equals()方法都表示相等的含义。比如
    public boolean equals(Object obj){ 
       System.out.println(obj); 
       return false; 
         
    } 那就没有相等的含义。
      

  9.   

    List list;
    list.equals(null);
    编译的时候为什么不报错?