在Thinking in Java中,讲到对象的比较。其中一种方法是实现Comparator接口的。但是Comparator接口有两个方法,equals()和compare(),但是一般只实现compare()方法。实现接口的时候难道可以挑着实现其方法吗?

解决方案 »

  1.   

    当然不是了,必须把接口把接口的method()全部实现!
      

  2.   

    当然,接口是都要实现的,要不就变成抽象类了,呵呵
    你所说的那个equals(Object o),是Object的,已经有实现了,
    要你去实现他,是因为在做compare()的时候就是用这个比较的,
    所以你重写一下它是对的。
      

  3.   

    我分开粘一下代码吧,首先是Comparator接口
    public interface Comparator {
          int compare(Object o1, Object o2);
          boolean equals(Object obj);
    }然后是试验代码
    class TestComparator implements Comparator
    {
        public int compare( Object o1, Object o2 )
        {
            if ( ((TestCollection)o1).getSequence() < ((TestCollection)o2).getSequence() )
                return -1 ;
            else if (((TestCollection)o1).getSequence()==((TestCollection)o2).getSequence())
                return 0 ;

            return 1 ;
        }
    }
    很显然,TestComparator没有实现Comparator的全部方法,但这段代码没问题,编译通过并可执行
    why??????????????????难道接口的也有根,也是Object吗
      

  4.   

    java和C++不同,java中所有的类都直接或者间接继承自java.lang.Object类
    Object类里已经实现了  boolean equals(Object obj); 方法,所以你的TestComparator类实际上已经从Object类里继承了equals()方法,当然Object类里的equals()方法只比较两个引用是不是指向同一个对象,你的TestComparator类可以覆盖Object类里的equals()方法,这样写public boolean equals(Object obj) {
        return compare(this, obj) == 0;
    }
      

  5.   

    你的TestComparator隐含继承了Object的equals方法,于是这个方法就被当成了Comparator接口equals方法的实现。