问答详情
源自:9-9 Java 中的 Object 类 Ⅱ

重写equals方法的问题

运行到Dog other = (Dog) obj ;这里,老师说“运行到这里,显然两个对象的类型是相同的,那么我们把另一个对象再传换成Dog类型”既然已经是类型相同的,为什么还要转换成Dog类型呢?

提问者:JustV 2015-09-27 09:57

个回答

  • 天启之魂
    2015-09-29 10:25:57
    已采纳

    if (getClass() != obj.getClass())

                return false;

            Dog other = (Dog) obj;


    这句话,能执行到Dog other = (Dog) obj;

    就说明this.getClass()==obj.getClass,说明obj也是Dog类对象,只不过是用Object类的引用指向了这个对象,所以下面要把obj的类型给向下转换 然后继续下面的比较 来比较Dog类特有的内容

  • 天启之魂
    2015-09-29 10:27:09

    顺便说下 我也很喜欢一拳超人 哈哈!

  • JustV
    2015-09-29 09:23:29

    没看出来是哪里做了类型提升啊。。。还望指教~

    @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;
    	}


  • 天启之魂
    2015-09-27 12:46:47

    一开始时使用父类引用指向的子类对象,虽然是子类的对象但是在定义 时把子类对象做了类型提升,提升成了父类,当你需要用到这个对象中的子类内容时,就需要把类型给调回来