java - Java中遇到多态时如何处理equals

标签 java polymorphism

我遇到了一个问题,我感到很困惑。 像这样的事情:

class animal and 
class cat extends animal

现在假设我已经重写了动物和猫中的 equals 方法。

参见:

cat a = new cat("white","Tom")   //cat has specific property name    
cat b = new cat("black","Jim")    
a.equals(b)                      //return false    
animal c = (animal)a             //animal has no name property

c.equals(a)a.equals(c) 均返回 true

这很奇怪,因为你不能说动物是猫。

而且我了解到 Java 中的强制转换不会更改对象的类。所以c.getClass()仍然返回cat。但这可以做些什么吗?在将动物与猫进行比较时,我想要一个错误。

谢谢

最佳答案

Java 不比较引用变量类型;它正在比较它们引用的对象。在您的情况下,Animal aCat c 都是 Cat。此外,它们都引用完全相同的对象

关于java - Java中遇到多态时如何处理equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35612870/

相关文章:

C++ 如何将 std::vector<Derived*> 类型的指针设置为 std::vector<Base*> 类型的对象

java - 如何从父类(super class)调用抽象方法(在子类中重写)?

java - 在这种情况下如何避免 instanceof 运算符

java - 如何导入来自以另一个类为条件的配置 bean 的 bean?

java - 如何创建 dspace docker 工作空间?

java - 如何从父类(super class)和子类访问信息?

c++ - 如何判断两个多态对象是否相等?

java - 在不使用 instanceof 的情况下使用重载方法进行动态调度(运行时多态性)

java - 如何识别 Java 中文本文档的语言?

java - 如何在 spring 中以 react 方式提供文件/PDF 文件