问个基础问题 
public interface IPO{ 
    public abstract boolean equals(Object o); 
    public abstract int hashCode(); 

public class TestInterface implements IPO{ } 为什么上面这段代码编译没问题,而下面这个却不能编译? public abstract class APO{ 
    public abstract boolean equals(Object o); 
    public abstract int hashCode(); 

public class TestAbstract extends APO{ } 起初我对第一段代码能通过编译感到奇怪,后来给自己的解释是:TestInterface会自动调用Object的equals和hashCode方法。 
可是换成抽象类,这解释好像又不通了。

解决方案 »

  1.   


         第一个可以这样解释 ,TestInterface会自动调用Object的equals和hashCode方法。
    也就是你的父类Object帮你实现了
          public   abstract   boolean   equals(Object   o);   
         public   abstract   int   hashCode();第2个 :
    public   abstract   class   APO{   
            public   abstract   boolean   equals(Object   o);   
            public   abstract   int   hashCode();   
    }
    APO的这2个方法是覆盖Object中的 equals()和 hashCode();
    所以当 :
    public   class   TestAbstract   extends   APO{   }   
    由于java中的类是单一继承,所以TestAbstract只能继承父类APO
    由于父类是抽象类,如果不实现父类中的抽象方法,那么也应该声明为
    abstrcat的
    应该改为:
    public abstrcat  class   TestAbstract   extends   APO{   }   
    或者:
    public   class   TestAbstract   extends   APO{   
          public   boolean   equals(Object   o){
             ..............
          }   
          public   int   hashCode(){
             .............
          }  
    }   
      

  2.   

    刚刚一位朋友和我说:金山-矿工(27362xxxx) 19:12:06
    因为APO已经重写了object的这两个方法,所以子类也要实现了
    金山-矿工(27362xxxx) 19:12:13
    它是class啊我就明白了。同时谢谢2楼。