A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 官仁杰 中级黑马   /  2012-10-1 21:11  /  1765 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 官仁杰 于 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方法没有重写,为什么程序能通过呢

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
我的问题是,实现接口不是应该重写接口里所有的方法吗?我查了API文档,Comparator接口还有一个equals方法没有重写,为什么程序能通过呢?
解答:因为类的基类是Object,所以类默认已经实现equlas()方法。你可以自己重写基类的equlas()方法,进行验证~

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
每个类默认继承自java.lang.Object, Object类有equals() 方法,所以子类中有equals()方法。
回复 使用道具 举报
严海荣 发表于 2012-10-1 21:22
每个类默认继承自java.lang.Object, Object类有equals() 方法,所以子类中有equals()方法。 ...

回答的很好
回复 使用道具 举报
实现接口是应该重写接口的所有方法,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;
        }
}

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马