2013-04-07 144 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功能。

相關問題