关于@Override注释的问题

时间:2011-05-18 18:12:23

标签: java android

我是Android开发新手。我想知道为什么我们必须在android中使用@Override注释的每个重写方法之前?在常规Java中,这不是必需的。

请帮助 谢谢

3 个答案:

答案 0 :(得分:4)

使用@Override表示法,因此编译器可以警告您方法签名是否与超类方法签名不同。它可以警告你有关繁琐的错误,并且它在Android中不是必需的,但它在“普通”Java编程和Android编程中都是很好的做法。

如果您处于“普通”状态,Java拼错了toString方法,例如public String toString(int n) {...}并且您有@Override编译器会警告您,因为您没有覆盖超类中的方法。

答案 1 :(得分: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可以在编译时捕获这些问题。

这在重构时特别有用。如果您更改方法签名或名称,但没有@Override注释,某些方法可能会导致难以发现的错误(当然,对于现代IDE来说,很多这样的痛苦是减轻了,但仍然)。如果您明智地使用@Override注释,现在将出现编译器错误,因此您将能够在派生类中修复方法签名。

答案 2 :(得分:0)

因为这是一个很好的编程习惯。如果基本方法的签名发生变化(我之前在这些类型的错误上浪费了数小时),那么在不使用@Override的情况下覆盖方法会在将来导致潜在的难以发现的错误。