2013-01-10 60 views
0

我知道它應該工作,但它不。我有一個類繼承定義如下:爲什麼不擴展工具與實現?

public class VisitManagementForm extends FormWithTitle implements Property.ValueChangeListener { 

現在只允許覆蓋的方法從延伸,它不會使和甚至是不允許我實現從Property.ValueChangeListener /重寫方法。這是爲什麼? 我用extends來切換實現的位置,然後只有這些實現工作,並且擴展看起來不可見。

我最近把項目變成了Maven,Maven是否有可能導致這種瘋狂?也許我需要指定一些東西來允許它與它?還是我在這裏錯過了一些東西?

Property.ValueChangeListener應該強制實現此方法是這樣的:

@Override 
public void valueChange(ValueChangeEvent event) { 
    // TODO Auto-generated method stub 

} 

但是現在我得到它需要覆蓋或實現超方法爲它的錯誤...

編輯:我在項目中使用Java 1.6。

編輯:另外如果我嘗試去實現其他東西(同時離開延伸那裏),它暗示了我實現的方法,但是如果我實現ValueChangeListener它並不建議我實現任何東西,但如果你然後刪除擴展和離開只是實現了ValueChangeListener,然後建議再次實現它的方法。但只要我保持延伸,我似乎得到上述錯誤。

+0

不,Maven與此無關。你可以展示更多的代碼,也許是一個完整的,可編譯的例子嗎? – GreyBeardedGeek

+0

您正在使用哪個版本的java? –

回答

2

你在做什麼是非法多繼承。檢查this example from of Java Language specification

+0

這似乎是可能的答案。假設FormWithTitle是一個Vaadin表單子類,它已經實現了Property.ValueChangeListener - 簡單地刪除「implements Property.ValueChangeListener」 – GreyBeardedGeek

+0

我不明白這是如何相關的 - 你引用的部分是關於從泛型類繼承和改變它們的類型。 一個預感告訴我,卡提克的答案是正確的。 – RonK

+0

我懷疑這一點,因爲當我刪除實現Property.ValueChangeListener它仍然說相同。所以我假設FormWithTitle沒有實現Property.ValueChangeListener –

3

請注意,您不能將@Override註釋添加到在Java 5中實現接口的方法 - 它會生成錯誤。它允許在Java 6中

Source

+0

我更新了我的問題。我正在使用Java 6(1.6)進行此項目,而不是5. –

+0

@ArturasM沒有註釋是您使用的函數的重寫? –

+0

我不確定你的意思?但是,如果我刪除了延伸並僅留下工具,它會自動爲我創建。 –

0

如果這是工作,你切換到Maven之前,其原因可能是默認的Maven編譯器插件的源版本設置爲1.5,這意味着代碼,正如另一個答案中已經提到的那樣,您不能使用@Override作爲接口方法。

+0

嗯,當我將它轉換爲Maven時,我遇到了問題,因此我必須指定它爲1.6。所以它被指定了,我稍後添加了implements Property.ValueChangeListener,但我想這也許還是有關係的。它可能不是。 –

相關問題