2013-04-07 104 views
1

我试图实施comparable以便使用,但由于某种原因,它没有在超类中找到compareTo方法。我正在比较字符串供参考。我不明白为什么我的“Comparable”接口不工作

编辑:对不起,我忘了添加我收到的错误。那就是:

Employee.java:32: error: cannot find symbol  
return super.compareTo((Object)other); 
      ^
symbol: method compareTo(Object) 

代码:

public abstract class Employee implements Cloneable, Comparable 
{ 
private Name name; 
private double weeklyPay; 
public Employee(String first, String middle, String last, double weeklyPay) 
{ 
    this.weeklyPay = weeklyPay; 
    name = new Name(first,middle,last); 
} 
public Employee(String last, double weeklyPay) 
{ 
    this.name = name; 
    this.weeklyPay = weeklyPay; 
    name = new Name(last); 
} 
public Employee(String first, String last, double weeklyPay) 
{ 
    this.name = name; 
    this.weeklyPay = weeklyPay; 
    name = new Name(first,last); 
} 

public abstract double getWeeklyPay(); 

public String getFullName() 
{ 
    return name.getFullName(); 
} 

public int compareTo(Object other) 
{ 
    return super.compareTo((Object)other); 
} 

public int compareTo(Name name) 
{ 
    return compareTo((Object)name.getFullName()); 
} 
+0

有什么不合适呢?请提供更多详情,以便我们能够帮助您。 – 2013-04-07 18:51:14

+0

什么是超类比类? – 2013-04-07 18:52:03

+0

如果Employee不扩展Object以外的任何类,则不能调用super.compareTo,becase super指的是Object类,Object中没有compareTo方法。 – 2013-04-07 18:54:01

回答

6

java.lang.Object,这是你的超类,没有实现Comparable。您应该将类​​的签名更改为:

public abstract class Employee implements Cloneable, Comparable<Employee> 

,然后实现此方法:

public int compareTo(Employee other) { 
    // logic to compare here 
} 

有了实际的逻辑来进行比较(又名,不要试图依赖于某些其他物体实现)。

1

Comparableinterface,因此它没有缺省实现。你的班级没有扩展任何其他class,这意味着它不是继承任何实现。

super.compareTo(...)将总是以这种方式失败,除非您扩展另一个提供实现的类。

0

我觉得你真的想要写不同的比较,一个OFR要比较的每个字段:姓名等

0

问题是你正试图打电话super.compareTo(Object object),但因为你的Employee类本身不延长类,它将在Object中查找compareTo方法,而Object没有该方法。您需要实际实现Employee中的compareTo功能。

相关问题