CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

Hi All, I hava a question...Help me..

楼主rayoko(靖康)2006-02-04 13:00:10 在 Java / J2SE / 基础类 提问

Hi   All!  
   
  我有一个问题,我要按照一个class的API写这个class,这个class  
  Implemented   Interfaces:    
  java.lang.Comparable    
   
  其中有一个method是这样的:  
   
  public   int   compareTo(java.lang.Object   other)  
   
  Compares   this   object   with   the   specified   object   for   order.   Returns   a   negative,   zero,   or   positive   integer   based   on   whether   this   object   is   less   than,   equal   to,   or   greater   than   the   specified   object.    
   
  Specified   by:  
  compareTo   in   interface   java.lang.Comparable  
  Parameters:  
  other   -   the   Object   to   compare   to.    
  Returns:  
  the   same   return   as   that   of   compareTo(String)   in   String   when   invoked   on   the   title   of   this   book.  
   
  这个method应该怎么写的?我的问题在于不太明白如何在这个class里使用这个interface。我感觉好像是在这个method里使用Interface   java.lang.Comparable   来compare两个string  
  请详细指点,谢谢。   简单说,就是我还不太明白interface是怎么回事,还有如何使用。  
  我的QQ   314386  
  MSN   rayoko-com@hotmail.com 问题点数:50、回复次数:6Top

1 楼gifted1982(玩游戏的Coder)回复于 2006-02-04 13:46:37 得分 10

public   class   Employee   implements   Comparable   {  
         
          public   Employee(String   n,   double   s,   int   year,   int   month,   int   day)   {  
                  name   =   n;  
                  salary   =   s;  
                  GregorianCalendar   calendar   =   new   GregorianCalendar(year,   month   -   1,   day);  
                  hireday   =   calendar.getTime();  
          }  
          public   int   compareTo(Object   otherObject)   {  
                  Employee   other   =   (Employee)   otherObject;  
                  if   (salary   <   other.salary)   {  
                          return   -1;  
                  }  
                  if   (salary   >   other.salary)   {  
                          return   1;  
                  }  
                  return   0;  
          }  
   
          private   static   String   name;  
          private   double   salary   =   100;  
          private   static   Date   hireday;  
  }  
   
      这是我练习用的小例子,希望对你有帮助,我也是初学者  
   
  在这个method里使用Interface   java.lang.Comparable   来compare两个string,不是这样的  
   
  是在你写得类中实现compareTo这个方法,借口中只有方法的定义,并没有方法的实现,  
  在继承他的类中要实现借口中的所有方法,否则好像要抛什么异常,学得不好,我也记不住了  
   
  Top

2 楼yczz(飞鸟)回复于 2006-02-04 19:02:49 得分 10

我想这个问题很多初学JAVA的人都很困惑,我第一次看到接口时也搞不懂为什么要设计接口这个东西,它有不提供什么功能.后来用的多了就想通了,其实接口只是一个约束,它要求你实现接口中的所有方法,对程序元而言接口是个约束,比如系统分析师设计出各个类的框架,程序元要去写其中的实现,如果没有接口程序元可能会写掉一个方法或没有按要求写,这样在整合各个程序元代码时很麻烦有接口以后,程序元如果犯了错误编译器会自动发现,而且程序元也可以很安全调用其他程序元的方法,只要他实现的某个接口.对系统而言接口是个标记,在编译时系统利用这个标记做特殊处理.Top

3 楼pengpenglin()回复于 2006-02-04 19:53:30 得分 10

首先你要搞清楚为什么JAVA中会出现接口这个东西,因为JAVA本身并不支持多重继承,如果一个类B继承了类A,那么类B就无法再继承类C了(当然了,前提是类A、C两者之间不存在继承关系)。  
  如果此时我要让类B即具有类A的功能,又想类B具有类C的功能,我要怎么办呢,最好的方法就是接口。我可以把类C换成为接口。在类B中使用extends   A   implement   C。这样的话类B就同时具有了类A、C的功能。如果你要用继承机制的话,是无法实现的。所以用接口实现的对象可以不受个数的限制而实现多个类的功能  
  Top

4 楼racewind()回复于 2006-02-05 01:10:32 得分 5

继承类,如果你要用类的实例对象来调用baseclass   的方法,不支持多重继承,  
  interface的话,不需要产生对象就可以调用,而且可以多重“继承”,前提是你必须覆写base的所有方法  
  Top

5 楼rayoko(靖康)回复于 2006-02-05 02:06:58 得分 0

interface的原理明白了,大概怎么用呢?  
  还有一个问题,哪里可以找到详细的javadoc的说明Top

6 楼zhangzhentao()回复于 2006-02-05 14:21:34 得分 15

可能从这个角度说明接口更形象些:)  
   
  ArrayList   al=new   ArrayList();  
  Stuendt   st1=new   Stuendt();  
  Stuendt   st2=new   Stuendt();  
  al.add(st1);  
  al.add(st2);  
  Collections.sort(al);  
  class   Student   implements   Compareable  
  {  
                                  .............  
                                  public   int   compareTo(Object   o)  
                  {  
                                  Student   s=(Student)o;  
                                  return   num   >   s.num   ?   1   :   (num==s.num   ?   0   :   -1);  
                  }  
  }  
  什么时候可以排序al呢?资料上说它里面的元素需实现了compareable接口。我再这里形象的说一下:)  
  当Collections排序时,它把al里面的每个对象插上compare接口,相当于一个电线板(al)上的插孔(compareable)插了许多用电器(object)的插座(compareable)。然后这个电线板聪明的通过一块智能芯片(Collections.sort())把这些用电器按照功率(自定义比较大小的方法)进行了一个排序,然后它就会按从小到大顺序自动把每个插座重新插一遍,就这么简单。  
  所以按照这个例子来讲,compareable接口一头是collections,一头是objects。  
  在collections里,sun公司在compareable内部编写了一个compareable方法,希望程序员能用。在这个方法里,都是相互比较1,0,-1这些值来比较大小的。为此,sun公司又写了一个compareable接口。这样,程序员只要自己设计的类插上(实现)这个接口,就能按照自己的意愿编写compareTo这个方法(通过返回-1,0,1这些值)来达到比较的目的。  
  ps:虽然接口里的compareto具体方法为空,但各自的比较方案都在里面写了。student里的结果纯粹是1,-1,0,然后collections调用sort依据它内部的compareto方法(当然,比如里面肯定有什么1就是大,0就是相等之类的解释)来比较大小进行排序Top

相关问题

  • !!!help me!!!!A easy question!!
  • MainFrame question, help me
  • Ez Question! Help me
  • help me!a question about toolbar
  • help me,help me
  • help me,help me!!!
  • help me,help me !!
  • help me help me
  • help me help me
  • help me ~~~~help me ~~~~help me ~~~~help me ~~~~help me ~~~~

关键词

  • 接口
  • 排序
  • 系统
  • compareto
  • stuendt
  • 方法
  • compareable
  • 类
  • 继承
  • 实现

得分解答快速导航

  • 帖主:rayoko
  • gifted1982
  • yczz
  • pengpenglin
  • racewind
  • zhangzhentao

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo