2010-06-01 40 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