这是一个新手问题。 我读到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...
}
}
答案 0 :(得分:5)
如果是这种情况,为什么我们需要使用“@override”将自定义逻辑添加到继承的类中?
我们没有。 @Override
注释没有技术含义 - 它存在于文档这个方法覆盖了超类中的一个,这有一些优点:
答案 1 :(得分:2)
@Override只是帮助Java编译器检测源代码中的错误,如果使用@Override注释的方法实际上没有覆盖它,编译器会生成错误。
使用@Override注释覆盖超类型方法的方法不是必须的。
答案 2 :(得分:1)
您不需要 @Override
。但它是一个有用的注释,会导致编译器检查您是否真的覆盖了您所说的方法。当您@Override
一个实际上没有覆盖方法的方法时,编译器会通知您这种差异。此外,它只是使您的代码更加清晰:因为Java中的所有方法都是隐式虚拟的,并且派生类中的方法与final
类中的非super
方法具有相同的签名隐式覆盖它 1 ,添加@Override
使代码更易于人理解。
1 :为了清楚起见,您可以不在派生类中使用与超类中的final
方法具有相同签名的方法。