2011-05-18 110 views
0

Im新的android开发。我想知道为什么我们必须在android?中使用@Override注释前面的每个overriden方法。在常规的java中,这不是必需的。关于@Override注释的问题

请帮助 感谢

回答

4

@Override符号是用来使编译器可以警告你,如果方法签名是不一样的超类的方法签名。它可以警告你有关繁琐的错误,并且它在Android中不是必需的,但在“普通”Java编程和Android编程中都是很好的做法。

如果你在“正常”的Java拼写错误的toString方法,例如public String toString(int n) {...}并且你有@Override编译器会警告你,因为你不重写超类中的方法。

+0

其实,你不能做“public int toString(){...}”,因为编译器会抛出一个错误。错误是“尝试使用不兼容的返回类型”。但是,如果你做toString(int i),那么你的答案是正确的。 – 2011-05-18 18:55:39

+0

@阿米尔:是的,当然不好的例子。我会更正它,谢谢:) – LuckyLuke 2011-05-18 18:59:06

0

因为这是一个很好的编程习惯。在未使用@Override的情况下重写方法会导致未来发现潜在的难以发现的错误,如果基本方法的签名发生变化(我之前浪费了几个小时的时间)。

1

这是一个最佳实践,它是安全的。假设你有一个类:

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注释,您现在将得到编译器错误,因此您将能够在派生类中修复方法签名。

+0

非常感谢! :) – Jim 2011-05-18 18:54:09

+0

该代码将不会*编译,因为MyExtendedClass不是抽象的,也不会覆盖doSomething()。 – sarumont 2011-05-19 17:54:09

+0

@sarumont我今天早上才意识到。我愚蠢。我修复了它。 – 2011-05-19 17:54:41