不做转换当然比较不了,虽然前面比较了类型,所以只有类型相同才会走到Dog other = (Dog) obj;这一行,但是你如果不写这一行程序就不会知道obj其实也是Dog,就像我们知道如果能看到太阳在天上就一定是白天,但是如果你只是告诉程序太阳在天上,它并不能判断出是白天,它只会严格按照我们指定的程序执行,但是并不具有最基本的逻辑推理能力。
类型相同为什么还会走Dog other = (Dog) obj;,属性名称的数据类型都相同了,那直接去判断age!=obj.age两个属性值是否相等不就好了吗,何必把obj的属性强制转换成Dog再去判断呢?简单说,删去Dog other = (Dog) obj;,if括号中改为age!=obj.age和例程一样不?