Java 是否可以在不使用instanceof和getClass的情况下重写equals?

Java 是否可以在不使用instanceof和getClass的情况下重写equals?,java,overriding,equals,Java,Overriding,Equals,我想重写equals(Object o),而不使用instanceof,getClass()和强制转换。这在Java中可行吗?如果可行,它是如何可行的? 编辑:我也想用这个方法。 例如:我想在Cow类中重写此方法,并使用它检查我的Cow在逻辑上是否等于其他Cow 谢谢大家的回答。我的主要问题是:如果我把车作为另一个类发送给我的奶牛或任何其他对象,会发生什么。我如何检查对象是否得到了方法getName()(假设我的奶牛得到了这个方法)?如果相等的标准仅限于使用只能从对象获得的信息,那么肯定是可能的

我想重写
equals(Object o)
,而不使用
instanceof
getClass()
和强制转换。这在Java中可行吗?如果可行,它是如何可行的? 编辑:我也想用这个方法。 例如:我想在Cow类中重写此方法,并使用它检查我的Cow在逻辑上是否等于其他Cow


谢谢大家的回答。我的主要问题是:如果我把车作为另一个类发送给我的奶牛或任何其他对象,会发生什么。我如何检查对象是否得到了方法
getName()
(假设我的奶牛得到了这个方法)?

如果相等的标准仅限于使用只能从对象获得的信息,那么肯定是可能的

这/似乎/不太可能。。。如果只使用
对象的方法,为什么要重写
equals
?但是,如果这适合您的设计,那么没有什么可以阻止您这样做

只需确保维护在

中定义的合同即可

确保
Cow
可序列化,并确保其序列化形式是规范的(最坏的情况是实现
Externalizable
并手动编写自己的规范序列化),然后在
equals
中执行以下操作:

  • 尝试序列化参数。如果失败,则返回false
  • 序列化
  • 比较两者的序列化字节
  • 由于串行表单包含标识类型的字符串,因此它包含区分不同类型实例所需的字节

    这并不容易,效率低下,可能是一场维护噩梦,绝对不应该是您的首选,但它确实证明了Java代码有一些可用的语言技巧,可以在不进行
    instanceof
    Class
    相同性检查的情况下进行类型区分


    不过需要注意的是:序列表单不会区分不同类加载器中加载的同名类。

    是否要为创建的自定义对象覆盖它?当然
    boolean equals(Object o){return true;}
    @SLaks:这将违反equals()方法的约定,该方法应为空参数返回false。为什么不使用
    instanceof