4

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

如果是这种情况,那么为什么我们需要使用“@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...
} 

}
4

3 回答 3

5

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

我们没有。@Override注释没有技术意义——它的存在是为了记录这个方法覆盖超类中的一个这一事实,这有一些优点:

  • 如果您查看代码,它会告诉您有一个超类方法,对于理解该方法的作用可能很重要
  • 如果超类方法的签名以子类方法实际上不再覆盖它的方式更改,您将收到编译器错误。
  • 如果您在不使用注释的情况下覆盖方法,您可能会收到编译器警告,以防您无意中这样做。
于 2013-07-26T13:31:20.737 回答
2

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

使用@Override 来注释覆盖超类型方法的方法不是强制性的。

于 2013-07-26T13:29:59.310 回答
1

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

1:明确地说,派生类中的方法不能final与超类中的方法具有相同的签名。

于 2013-07-26T13:29:04.380 回答