JVM - 子类方法的执行顺序和@override的使用

时间:2013-07-26 13:21:50

标签: java oop

这是一个新手问题。 我读到JVM的执行是从层次结构中从最低级别搜索methodname开始的,如果该方法在该类中不可用,则它将遍历到查找该方法的父类。

如果是这种情况,为什么我们需要使用“@override”将自定义逻辑添加到继承的类中?

以下示例说明了我的问题

class superclassA
{

method()
{
}

}

class subclassB extends superclassA
{

@Override 
//While executing if JVM starts looking for the method name from the lowest hierarchy
//then why do we have to use "override" as the methodname will be matched from the lowest level itself?
method() 
{
--custom subclass specific code...
} 

}

3 个答案:

答案 0 :(得分:5)

  

如果是这种情况,为什么我们需要使用“@override”将自定义逻辑添加到继承的类中?

我们没有。 @Override注释没有技术含义 - 它存在于文档这个方法覆盖了超类中的一个,这有一些优点:

  • 如果您查看代码,它会告诉您有一个超类方法可能对了解此方法的作用很重要
  • 如果超类方法的签名以子类方法实际上不再覆盖它的方式发生变化,您将收到编译器错误。
  • 如果您在不使用注释的情况下覆盖方法,则可能会收到编译器警告,以防您无意中执行此操作。

答案 1 :(得分:2)

@Override只是帮助Java编译器检测源代码中的错误,如果使用@Override注释的方法实际上没有覆盖它,编译器会生成错误。

使用@Override注释覆盖超类型方法的方法不是必须的。

答案 2 :(得分:1)

您不需要 @Override。但它是一个有用的注释,会导致编译器检查您是否真的覆盖了您所说的方法。当您@Override一个实际上没有覆盖方法的方法时,编译器会通知您这种差异。此外,它只是使您的代码更加清晰:因为Java中的所有方法都是隐式虚拟的,并且派生类中的方法与final类中的非super方法具有相同的签名隐式覆盖它 1 ,添加@Override使代码更易于理解。

1 :为了清楚起见,您可以在派生类中使用与超类中的final方法具有相同签名的方法。