java中的@Override注释如何检查方法拼写错误?
我正在查看Stackoverflow中有关java中的@Override注释如何检查方法拼写错误?,java,annotations,Java,Annotations,我正在查看Stackoverflow中有关@Override注释的信息 我了解到它会覆盖父方法。然而,我看到一些评论说,@Override实际上可以检查拼写错误,将@Override注释放在所有方法之前是非常有用的 我想知道@Override如何检查方法名称的拼写错误。(如果我理解正确)让我们来看看我想重写这个方法: public class Foo { public void foo() { ... } } 没有@覆盖,我仍然可以覆盖它: public class Bar exten
@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注释。答案很简单
@重写注释指示编译器重写重写注释下的方法,即,在编写代码时,具有匹配签名的方法预期会出现在类层次结构中的父类之一中,该类中的方法正在编写中
它在编译时检查层次结构(即父类、父类等)中您编写的当前方法是否有具有相同签名的方法。如果不是,则会引发错误。这与拼写检查无关。这是关于签名匹配,即参数的类型和顺序以及方法名称。你指的是什么块?请注意,你可能想用(编译器)错误替换异常,因为编译器不会抛出异常,但错误“将导致警告”,实际上,当你试图编译代码时,它将导致异常。