Im新的android开发。我想知道为什么我们必须在android?中使用@Override注释前面的每个overriden方法。在常规的java中,这不是必需的。关于@Override注释的问题
请帮助 感谢
Im新的android开发。我想知道为什么我们必须在android?中使用@Override注释前面的每个overriden方法。在常规的java中,这不是必需的。关于@Override注释的问题
请帮助 感谢
的@Override
符号是用来使编译器可以警告你,如果方法签名是不一样的超类的方法签名。它可以警告你有关繁琐的错误,并且它在Android中不是必需的,但在“普通”Java编程和Android编程中都是很好的做法。
如果你在“正常”的Java拼写错误的toString方法,例如public String toString(int n) {...}
并且你有@Override
编译器会警告你,因为你不重写超类中的方法。
因为这是一个很好的编程习惯。在未使用@Override
的情况下重写方法会导致未来发现潜在的难以发现的错误,如果基本方法的签名发生变化(我之前浪费了几个小时的时间)。
这是一个最佳实践,它是安全的。假设你有一个类:
public class MyClass {
...
...
public void doSomething() {
...
...
}
}
现在假设你扩展它:
public class MyExtendedClass extends MyClass {
...
...
public void doSomthing() {
...
}
}
这段代码编译,而是因为你居然还没有覆盖的方法,你就会有问题!请注意拼写错误。现在,如果你有@Override
标注为:
public class MyExtendedClass extends MyClass {
...
...
@Override
public void doSomthing() {
...
}
}
Java编译器会抱怨,因为您要重写不会在基类中存在的方法。基本上使用@Override
可以让您在编译时捕获这些问题。
这在您重构时特别有用。如果您更改了方法签名或名称,但没有注释,则某些方法可能会导致难以找到的错误(当然,使用现代IDE的许多此类疼痛已得到缓解,但仍然存在)。如果明智地使用@Override
注释,您现在将得到编译器错误,因此您将能够在派生类中修复方法签名。
其实,你不能做“public int toString(){...}”,因为编译器会抛出一个错误。错误是“尝试使用不兼容的返回类型”。但是,如果你做toString(int i),那么你的答案是正确的。 – 2011-05-18 18:55:39
@阿米尔:是的,当然不好的例子。我会更正它,谢谢:) – LuckyLuke 2011-05-18 18:59:06