2010-06-01 35 views
1

我的類如下@Override會導致類層次涉及接口,抽象類和具體類

public interface A { 
    public void doSomething(); 
} 
public abstract class B implements A { 
    public void doOneMoreThing() { 
     // Do one more thing 
    } 
} 
public class C extends B { 
    @Override    <---- Causes error 
    public void doSomething() { 
     // Do something 
    } 
} 

有人能告訴我,爲什麼這個@Override批註導致錯誤的問題?

感謝 Nayn

回答

5

檢查你正在使用JDK 1.6和您的-source和-target參數(如果已定義)設置爲1.6。 @Override的語義在Java 6中已更改。 在Java 5中,@Override不允許覆蓋接口方法(僅限於超類方法),但它允許在Java 6中(以及最新版本的JDK 5,從u21起)

請參閱Why is javac failing on @Override annotation

+0

精確。我正在使用1.5謝謝。 – Nayn 2010-06-01 13:30:35

+0

實際上,將源和目標設置爲1.5不會產生此錯誤。 JDK 1.5的最新更新版本也不會。只有舊版本的JDK 1.5。 – 2010-06-02 00:16:08

+0

另外,如果'-source 1.6 -target 1.6'工作,這將意味着他在JDK 1.6或更高版本上,在這種情況下,沒有理由指定那些參數,會不會有? – 2010-06-02 00:17:06

2

你應該使用

@覆蓋

你寫@Overrides然後它不工作了;)

+0

我使用eclipse,因此並沒有犯任何錯誤。我明白@Override的含義。 – Nayn 2010-06-01 13:18:40

+0

然後chcek如果你使用java 1.6。 @override for interfaces僅適用於1.6及以上版本 – RoflcoptrException 2010-06-01 13:23:10