黑马程序员技术交流社区

标题: 为什么提示我未覆盖Comparable中的compareTo方法? [打印本页]

作者: 痞子、蔚    时间: 2014-7-21 18:17
标题: 为什么提示我未覆盖Comparable中的compareTo方法?
本帖最后由 痞子、蔚 于 2014-7-21 20:21 编辑

import java.util.*;
class Student implements Comparable
{
        private String name;
        private int age;
        Student(String name,int age)
        {
                this.name = name;
                this.age = age;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
        public int compareTo(Student s)
        {
                int num = new Integer(this.age).compareTo(new Integer(s.age));
                if(num ==0)
                        return this.name.compareTo(s.name);
                return num;        
        }
为什么提示我未覆盖Comparable中的compareTo方法?
作者: 韩天雷    时间: 2014-7-21 18:32
Comparable后面要加泛型
  1. class Student implements Comparable<Student> {
  2.         private String name;
  3.         private int age;

  4.         Student(String name, int age) {
  5.                 this.name = name;
  6.                 this.age = age;
  7.         }

  8.         public String getName() {
  9.                 return name;
  10.         }

  11.         public int getAge() {
  12.                 return age;
  13.         }

  14.         public int compareTo(Student s) {
  15.                 int num = new Integer(this.age).compareTo(new Integer(s.age));
  16.                 if (num == 0)
  17.                         return this.name.compareTo(s.name);
  18.                 return num;
  19.         }
  20. }
复制代码

作者: 张慈瑞    时间: 2014-7-21 18:34
在覆盖Comparable 的compareTo()的方法的时候参数必须是Object类型的或者在实现Comparable接口的时候必须添加泛型Comparable<Student>。
作者: wisely    时间: 2014-7-21 18:51
二楼正解,泛型不注意就挂了
作者: wubing    时间: 2014-7-21 21:37
可以不加泛型的 但是一定要注意重写接口Comparable的方法compareTo()的时候,参数要和接口中的一模一样,否则就不是重写
Comparable接口中的方法为:public int compareTo(Object o)
而你重写的方法为:public int compareTo(Student s),此时的参数不能为Student,须为Object,而在方法中再把Object强转为Student
正确重写为:
public int compareTo(Object o)
        {
             Student s=(Student)o;  
                int num = new Integer(this.age).compareTo(new Integer(s.age));
                if(num ==0)
                        return this.name.compareTo(s.name);
                return num;        
        }

作者: xwh1230    时间: 2014-7-21 22:39
嗯,常见的错误,public int compareTo(Student s)这个地方参数必须是Object o类型的,传Student过来不行




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