java中equals重写为什么必须把传入的参数向下转型呢?是因为传入的时候向上转型过的原因吗?

img

简单理解就是:equals方法入参是Object类型,Object o 被你赋值为User对象,但是对于编译器来说,它只认变量声明的类型,。可乐不管放到杯子里还是放到碗里,它还是可乐,不会变成白开水。而Object类型是没有name和age属性的,所以如果你直接使用o变量,是没办法调用name和age属性的。所以要用强制转换将Object o转成User u,让编译器理解原来杯子里装的是可乐,o对象本来就是User类型,只不过被赋值给Object o,所以强转不会报错。

简单来说因为equals这个方法的参数规定是Object 这个最大的类型!
而你要比较的其它类型都是Object 的直接或者间接子类(单继承);
所以根据多态(向上转型是调用的子类和父类共有的属性方法)、(向下转型能调用子类特有的属性方法);
你的目的是比较子类的属性,所以需要向下转型。