[英]@override annotation
任何人都可以告诉我这段代码:
public class OvTester {
@Override
public int hashCode() {
return toString().hashCode();
}
}
确定toString
在该方法中OvTester
类覆盖toString
在其超类方法。
我想知道这是否属实,如果是,它是如何工作的?
如果不是这样,那么这是真的:
“ OvTester
的hashCode()
方法必须覆盖其超类中的相同名称方法”
?
如果这不正确那么什么是正确的?
当您在子级别中重新定义具有相同签名的方法时,会发生方法重写。
所以在这里你重写hashCode()
,而不是toString()
@Override
注释是可选的(但这是一件非常好的事情)并且表明这应该是重写的。 如果拼错或有错误类型的参数,编译器会发出警告。
所以是的,第二个语句是真的(在这种情况下,超类是java.lang.Object
)
我想知道这是否属实,如果是,它是如何工作的?
不,这不完全正确。
@Overrides
注释表示“ 此方法会覆盖超类中具有相同名称的方法 ”。
在这种情况下hashCode
的OvTester
覆盖hashCode
的Object
。
如果它不是真的,那么这是真的:
OvTester
的hashCode()
方法必须覆盖其superClass中的相同名称方法吗?
是。 这正是它的工作原理。
当一个方法没有做任何事情而不是调用另一个方法(几乎是你在你的例子中得到的)时,它通常被称为委托方法 。 也许这就是你对此感到困惑的原因。
@Override
注释不会“确定”任何内容。 如果带注释的方法没有覆盖超类或接口方法,它只是一个告诉编译器引发错误的标志。 它是开发人员帮助维护其理智的工具,仅此而已。
在这种特定情况下,它只是注意到OvTester
中的hashCode()
实现覆盖了Object
定义的hashCode()
方法。 这与toString()
没有任何关系,并且从hashCode()
方法调用超类的toString()
方法不会与覆盖toString()
。
这是真的? OvTester中的hashCode()方法必须覆盖其superClass中的相同名称方法吗?
确实如此,如果超类中没有与带注释方法的签名匹配的可覆盖hashCode()
方法,则注释将导致编译器引发错误。
不,这只会意味着重写了hashCode()方法。 编译器将在编译时检查hashCode()是否是一个被覆盖的方法(带有该签名)。
该代码覆盖了基础Object
类的hashCode()
方法。 toString()
方法仍然具有原始实现。
要覆盖toString()
,请执行以下操作:
@Override
public String toString() {
//Your own toString() implememntation here
}
只要在子类中的方法具有相同的名称和签名作为父类中的方法, 并在父类中的方法不是私人将(无论注解的存在overidden @Override
)
@Override
只是编译时检查实现者是否真的覆盖了该方法。
如果你尝试覆盖
@Override
public void equals(Object ob){
}
它将无法编译
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.