2011-03-01 27 views
0

在Eclipse中,爲什麼缺少子類中顯示的接口方法而不顯示父類?Eclipse在子類中顯示缺少接口方法,不在父類中

比方說,我有一個簡單的界面:

public interface ISpeaks { 
    String talk(); 
} 

然後,我有這個接口的類來實現其擴展:

public abstract class Cat implements ISpeaks { 
    // forgot to implement talk() 
} 

public class Tiger extends Cat { 
    // also didn't implement talk() 
} 

Eclipse的抱怨虎缺少方法talk()(確切錯誤:The type Tiger must implement the inherited abstract method ISpeaks.talk())。我期望它告訴我,Cat缺少talk(),因爲Cat是顯式實現接口的類。不是老虎。

這絕對是「呃?」因爲我在Spring/Hibernate中,並且每當向DAO接口添加一個方法時,我都會遇到類似這樣的錯誤,因爲每個數據庫感知的測試用例都會缺少一個方法 - 而不是單個錯誤嘲笑我的DAO的基本測試方法。

+5

最後一段給你確定你沒有標記您的Cat類爲抽象? – Guillaume 2011-03-01 14:35:07

+0

我的確將其標記爲抽象。不過,這是一個實現接口的抽象方法。 – ashes999 2011-03-01 14:39:19

+1

另外,在ISpeak的方法聲明中沒有理由使用'public'。接口方法自動爲「public」和「abstract」。 – 2011-03-01 14:44:20

回答

9

因爲Cat類是抽象類,所以不必實現所有的接口方法。

你只需要實現所有接口方法的具體類實現ISpeaks,如Tiger

這是合乎邏輯的,因爲沒有辦法實例化類型爲Cat的對象,因此無法創建未完全實現接口的對象。

一個類似的例子是在http://download.oracle.com/javase/tutorial/java/IandI/abstract.html

+0

我刪除了抽象(這是不必要的),我得到了我的期望。謝謝。 – ashes999 2011-03-01 14:51:05

+2

@ ashes999 - 如果您不需要創建非專用的Cat實例,則將其聲明爲「abstract」是正確的。 – 2011-03-01 15:14:11

+0

@Stephen C.你說得對,但這給我帶來了假陰性。我想我只能忍受它。 – ashes999 2011-03-01 16:03:19

相關問題