Java 重写equals 方法 为什么还要强制转换类型

if(obj instanceof A){A a1=(A)obj},obj已经是类A或A子类B的实例,还要强制转换?1.obj是A实例:A a1=(A)obj还强制转换不是多余吗?2.obj是A子类B实例:那么B继承A,B也可以用A中的属性、方法之类的,为什么还要强制转换?

java支持自动转型,但只能向上专心,因为向上转型一定是安全的(也就是说Object obj = a1是没问题的)。而向下转型隐含一定的风险(可能会导致类型转换异常),所以必须由你来进行转换。追问

那你的意思是“A a1=(A)obj”不能自转(这个我知道需强制),但obj已经具体到A或B了(obj instanceof A)他虽然是Object中的,但他不止步于Object,已经是本类(A)或子类(B)中的了,||不存在下转||,就好比A a1=(A)a2,a2是A中的了,强转不是多余???

追答

因为你引用的类型是Object。对象实例的类型是根据引用的类型来判断的。java不支持根据实例的真正类型进行乡下转型。记住,是java不支持,不是多此一举!

追问

就是说虽然确定了是A或B类的,但是他是Object obj引进的实例,还是要由Object型下转到A型?是这样吗?

温馨提示:答案为网友推荐,仅供参考