" @覆盖"在Java中

时间:2014-12-12 05:52:09

标签: java android

我正在学习Java来构建一个Android应用程序。我看到在很多地方,一个班级被继承,过度训练的方法被标记为" @Override"。

例如:

@Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

有人可以解释一下,编译器如何解释这个令牌" @Override"。这是保留字还是评论。或者只是" @"这有什么特别的,比如我们有" //"评论。

5 个答案:

答案 0 :(得分:1)

如果注释的方法是来自超类型(父类或接口)的不是,注释@Override将导致错误

JLS-9.6.3.4 @Override说(部分),

  

如果使用注释@Override注释方法声明,但该方法不覆盖或实现在超类型中声明的方法,或者不是覆盖等效于Object的公共方法,则会发生编译时错误。

答案 1 :(得分:1)

@Override是一个注释。

使用此方法,以便您可以利用编译器检查来确保实际从父类重写方法。这样,即使你犯了错误的方法名称拼写错误或者没有正确匹配参数,编译器也会警告你。

答案 2 :(得分:1)

overriding a method时,您可能希望使用@Override注释来指示编译器您要覆盖superclass中的方法。如果由于某种原因,编译器检测到该方法在superclasses之一中不存在,那么它将生成错误。

请参阅this以便更好地理解。

答案 3 :(得分:0)

From Oracle docs
@Override: @Override注释通知编译器该元素是要覆盖超类中声明的元素。重写方法将在Interfaces and Inheritance中讨论。

 // mark method as a superclass method
 // that has been overridden
 @Override 
 int overriddenMethod() { }
  

虽然在覆盖方法时不需要使用此注释,但有助于防止错误。如果标有@Override的方法无法正确使用覆盖其中一个超类中的方法,编译器会生成错误。

答案 4 :(得分:0)

符号字符(@)向编译器指示后面的内容是注释。在以下示例中,注释的名称为覆盖

@Override
void mySuperMethod() { ... }

annotation refrance

在您的示例中@Override指示onCreate(Bundle savedInstanceState)方法会覆盖或实现在超类型中声明的方法,如果超级类中不存在onCreate(Bundle savedInstanceState)则会导致错误。

@Override
public void onCreate(Bundle savedInstanceState) {}