java中的@Override注释如何检查方法拼写错误?

java中的@Override注释如何检查方法拼写错误?,java,annotations,Java,Annotations,我正在查看Stackoverflow中有关@Override注释的信息 我了解到它会覆盖父方法。然而,我看到一些评论说,@Override实际上可以检查拼写错误,将@Override注释放在所有方法之前是非常有用的 我想知道@Override如何检查方法名称的拼写错误。(如果我理解正确)让我们来看看我想重写这个方法: public class Foo { public void foo() { ... } } 没有@覆盖,我仍然可以覆盖它: public class Bar exten

我正在查看Stackoverflow中有关
@Override
注释的信息

我了解到它会覆盖父方法。然而,我看到一些评论说,
@Override
实际上可以检查拼写错误,将
@Override
注释放在所有方法之前是非常有用的


我想知道@Override如何检查方法名称的拼写错误。(如果我理解正确)

让我们来看看我想重写这个方法:

public class Foo {
    public void foo() { ... }
}
没有
@覆盖
,我仍然可以覆盖它:

public class Bar extends Foo {
    public void foo() { ... }
}
但如果我拼错了:

public class Bar extends Foo {
    public void fooo() { ... }
}
fooo
不会覆盖
foo
。如果我没有意识到拼写错误,我就不会知道
foo
实际上没有被覆盖。这可能会导致错误

但是,如果我将
@Override
添加到
fooo
,则:

public class Bar extends Foo {
    @Override
    public void fooo() { ... }
}

编译器会告诉我,
fooo
不会覆盖任何内容。我会看到这条消息,然后说“但它确实覆盖了
foo
!编译器为什么说它没有覆盖?等等!我拼错了。”

你的理解是错误的

第一:它是
@Override
。Java是区分大小写的,所以是的,区别很重要。 第二:

我了解到它会覆盖父方法

不,它只是标记了应用它的方法所做的事情。仅仅因为你在一个方法上加了
@Overrides
,并不能神奇地使它重写某些东西。否则会导致异常

至于检查拼写错误:假设您想要覆盖
toString()
方法

@Override
public String toString() {
  return "myString";
}
将会成功,因为toString确实像父类(对象)中的toString一样存在

但是,当您尝试时:

@Override
public String toSttring() {
  return "one t too many";
}
它将搜索父类和实现的接口。如果在任何地方都找不到此方法签名,它将抛出异常。鉴于这很可能是
toString()
而不是
toString()
,这是一个检查

然而,它并不只是检查拼写。它基本上检查方法签名(包括方法名)

如果您要尝试:

@Override
public Double toString() {
  return new Double("5");
}
除非您自己在类的父类中添加了此方法,否则此操作将失败,因为对象toString返回字符串

就像:

@Override
public String toString(String value) {
  return value;
}
出于同样的原因,它很可能会失败


编辑:只是为了澄清:
@Override
不会进行拼写检查。如果在父类中拼错了方法名称,如果您在子类中正确拼写它并添加覆盖注释,它将不起作用。

java@Override注释将确保方法签名中的任何超类更改都将导致警告,并且您必须进行必要的更改以确保类按预期工作

在编译时解决潜在问题比在运行时更好。因此,每当您试图重写一个超类方法时,请始终使用java@Override注释。

答案很简单

@重写注释指示编译器重写重写注释下的方法,即,在编写代码时,具有匹配签名的方法预期会出现在类层次结构中的父类之一中,该类中的方法正在编写中


它在编译时检查层次结构(即父类、父类等)中您编写的当前方法是否有具有相同签名的方法。如果不是,则会引发错误。这与拼写检查无关。这是关于签名匹配,即参数的类型和顺序以及方法名称。

你指的是什么块?请注意,你可能想用(编译器)错误替换异常,因为编译器不会抛出异常,但错误“将导致警告”,实际上,当你试图编译代码时,它将导致异常。