繁体   English   中英

从 Java 中的 Object class 覆盖方法

[英]Overriding method from Object class in Java

When I want to override method equals from class Object in some subclass A, why type of parameter of overridden function in subclass A has to be Object and not A. Like this

public boolean equals(Object o) {
...
}

而不是这个:

public boolean equals(A o) {
...
}

equals在父 class、Object 中声明。 当您尝试更改参数的类型时,您必然会使其更具限制性(因为 Object 是最不具体的类型)。

假设您尝试这样做

Object obj = new A();
obj.equals("str"); // should return false

在第二行,编译器对A一无所知。 该变量中可能有任何内容。 据编译器所知,这只是另一个 Object。 它不在乎该方法已在 A. Object.equals中被覆盖,将 Object 作为参数,因此这是完全有效的。

如果您的A实现已被更严格的类型覆盖,您将有根本的不兼容性。 该方法无法处理字符串,但完全可以传递一个。

这是因为您正在覆盖而不是重载 当您覆盖任何方法时,方法签名应该相同。

https://docs.oracle.com/javase/tutorial/java/IandI/override.html的行中检查以下内容

覆盖方法具有与其覆盖的方法相同的名称、参数数量和类型以及返回类型。 覆盖方法还可以返回被覆盖方法返回的类型的子类型。 此子类型称为协变返回类型。

您可能还会发现本教程很有用。

为了覆盖子类中的方法,该方法需要具有相同的名称、相同的参数或签名以及相同的返回类型(或子类型)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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