课程
/后端开发
/Java
/Java入门第二季 升级版
运行到Dog other = (Dog) obj ;这里,老师说“运行到这里,显然两个对象的类型是相同的,那么我们把另一个对象再传换成Dog类型”既然已经是类型相同的,为什么还要转换成Dog类型呢?
2015-09-27
源自:Java入门第二季 升级版 9-9
正在回答
if (getClass() != obj.getClass())
return false;
Dog other = (Dog) obj;
这句话,能执行到Dog other = (Dog) obj;
就说明this.getClass()==obj.getClass,说明obj也是Dog类对象,只不过是用Object类的引用指向了这个对象,所以下面要把obj的类型给向下转换 然后继续下面的比较 来比较Dog类特有的内容
JustV 提问者
顺便说下 我也很喜欢一拳超人 哈哈!
没看出来是哪里做了类型提升啊。。。还望指教~
@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; }
一开始时使用父类引用指向的子类对象,虽然是子类的对象但是在定义 时把子类对象做了类型提升,提升成了父类,当你需要用到这个对象中的子类内容时,就需要把类型给调回来
举报
课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙
2 回答关于重写equals()方法后想重新调用父类的equals()方法的问题
1 回答关于equals( )方法重写的疑问?
4 回答关于重写equals()方法的疑问
1 回答无法生成重写的equals()方法
5 回答为什么我重写equals方法时有问题?