2009-02-18 77 views

回答

47

你描述,@Override创建一个编译时检查一个方法是否被覆盖。这对确保您在尝试覆盖时没有愚蠢的签名问题非常有用。

例如,我已经看到了以下错误:

public class Foo { 
    private String id; 
    public boolean equals(Foo f) { return id.equals(f.id);} 
} 

该类编译如下写的,但添加@Override标签equals方法会导致编译错误,因为它没有覆盖equals方法对象。这是一个简单的错误,但它可以逃脱即使是经验丰富的开发人员的眼睛

21

它不仅使编译器检查 - 虽然这将足以使其有用;它也记录了开发者的意图。例如,如果你重写了一个方法,但是没有从类型本身的任何地方使用它,稍后有人来到代码中可能会奇怪为什么它在那里。注释解释了它的目的。

+2

也广泛回答我不知道当你回答这个问题时,你的声望点是什么。 – 2016-07-23 01:27:52

+0

@OmarTariq:粗略猜测,我怀疑大约有50K。 – 2016-07-23 01:36:28

2

没了 - 但它也提高了可读性(即除任何指示你的IDE使用,它可以很容易地发现,一个方法覆盖的声明在超)

10

不,你几乎钉上了它。

@Override告诉编译器你意图:如果标签的方法@Override,你打算覆盖从超类的东西(或接口,Java 6中)。一个好的IDE将有助于标记任何覆盖方法而没有@Override的方法,所以这两者的结合将有助于确保你正在做你想做的事情。