黑马程序员技术交流社区

标题: 关于Comparator接口的问题 [打印本页]

作者: 官仁杰    时间: 2012-10-1 21:11
标题: 关于Comparator接口的问题
本帖最后由 官仁杰 于 2012-10-1 22:15 编辑

在毕老师的视频里有这么一段练习程序
  1. import java.util.*;
  2. class  TreeSetTest
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 TreeSet ts = new TreeSet(new StrLenComparator());

  7.                 ts.add("abcd");
  8.                 ts.add("cc");
  9.                 ts.add("cba");
  10.                 ts.add("aaa");
  11.                 ts.add("z");
  12.                 ts.add("hahaha");

  13.                 Iterator it = ts.iterator();

  14.                 while(it.hasNext())
  15.                 {
  16.                         System.out.println(it.next());
  17.                 }
  18.         }
  19. }

  20. class StrLenComparator implements Comparator
  21. {
  22.         public int compare(Object o1,Object o2)
  23.         {
  24.                 String s1 = (String)o1;
  25.                 String s2 = (String)o2;
  26.                         
  27.                 int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
  28.                 if(num==0)
  29.                         return s1.compareTo(s2);

  30.                 return num;
  31.         }
  32. }
复制代码
我的问题是,实现接口不是应该重写接口里所有的方法吗?我查了API文档,Comparator接口还有一个equals方法没有重写,为什么程序能通过呢

作者: 武庆东    时间: 2012-10-1 21:21
我的问题是,实现接口不是应该重写接口里所有的方法吗?我查了API文档,Comparator接口还有一个equals方法没有重写,为什么程序能通过呢?
解答:因为类的基类是Object,所以类默认已经实现equlas()方法。你可以自己重写基类的equlas()方法,进行验证~
作者: 严海荣    时间: 2012-10-1 21:22
每个类默认继承自java.lang.Object, Object类有equals() 方法,所以子类中有equals()方法。
作者: 李玉生    时间: 2012-10-1 21:27
严海荣 发表于 2012-10-1 21:22
每个类默认继承自java.lang.Object, Object类有equals() 方法,所以子类中有equals()方法。 ...

回答的很好
作者: 黑马-王燚    时间: 2012-10-2 01:11
实现接口是应该重写接口的所有方法,Comparator接口中也确实还有一个equals方法,但是我们要知道,
所有的类都继承了Object类,而Object类中有equals方法,所以 从Object中继承过来的equals方法就重写了Comparator接口中的equals方法了,
class StrLenComparator implements Comparator
{
       //这里其实省略了这样的一句话
       // public boolean equals(Object obj) {}       这个方法 extends Object   
      
        public int compare(Object o1,Object o2)
        {
                String s1 = (String)o1;
                String s2 = (String)o2;
                        
                int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
                if(num==0)
                        return s1.compareTo(s2);

                return num;
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2