运行到Dog other = (Dog) obj ;这里,老师说“运行到这里,显然两个对象的类型是相同的,那么我们把另一个对象再传换成Dog类型”既然已经是类型相同的,为什么还要转换成Dog类型呢?
if (getClass() != obj.getClass())
return false;
Dog other = (Dog) obj;
这句话,能执行到Dog other = (Dog) obj;
就说明this.getClass()==obj.getClass,说明obj也是Dog类对象,只不过是用Object类的引用指向了这个对象,所以下面要把obj的类型给向下转换 然后继续下面的比较 来比较Dog类特有的内容
顺便说下 我也很喜欢一拳超人 哈哈!
没看出来是哪里做了类型提升啊。。。还望指教~
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Dog other = (Dog) obj; if (age != other.age) return false; return true; }
一开始时使用父类引用指向的子类对象,虽然是子类的对象但是在定义 时把子类对象做了类型提升,提升成了父类,当你需要用到这个对象中的子类内容时,就需要把类型给调回来