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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 痞子、蔚 于 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方法?

5 个回复

倒序浏览
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. }
复制代码
回复 使用道具 举报
在覆盖Comparable 的compareTo()的方法的时候参数必须是Object类型的或者在实现Comparable接口的时候必须添加泛型Comparable<Student>。
回复 使用道具 举报
二楼正解,泛型不注意就挂了
回复 使用道具 举报
可以不加泛型的 但是一定要注意重写接口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;        
        }
回复 使用道具 举报
嗯,常见的错误,public int compareTo(Student s)这个地方参数必须是Object o类型的,传Student过来不行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马