繁体   English   中英

@override注释

[英]@override annotation

任何人都可以告诉我这段代码:

public class OvTester {
    @Override
    public int hashCode() {
        return toString().hashCode();
    }
}

确定toString在该方法中OvTester类覆盖toString在其超类方法。

我想知道这是否属实,如果是,它是如何工作的?

如果不是这样,那么这是真的:

OvTesterhashCode()方法必须覆盖其超类中的相同名称方法”

如果这不正确那么什么是正确的?

当您在子级别中重新定义具有相同签名的方法时,会发生方法重写。

所以在这里你重写hashCode() ,而不是toString()

@Override注释是可选的(但这是一件非常好的事情)并且表明这应该是重写的。 如果拼错或有错误类型的参数,编译器会发出警告。

所以是的,第二个语句是真的(在这种情况下,超类是java.lang.Object

我想知道这是否属实,如果是,它是如何工作的?

不,这不完全正确。

@Overrides注释表示“ 此方法会覆盖超类中具有相同名称的方法 ”。

在这种情况下hashCodeOvTester覆盖hashCodeObject

如果它不是真的,那么这是真的: OvTesterhashCode()方法必须覆盖其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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM