老师说这个是判断两个对象类型是否相等,可是两个类型不是不一样么?老师说一样,一样的话后面怎么还要转换类型

来源:9-9 Java 中的 Object 类 Ⅱ

qq__878

2015-07-30 19:42

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

            return false;

//将传入的对象强制转换为当前对象

        Dog other = (Dog) obj;


写回答 关注

2回答

  • 末日黑龙
    2015-08-01 11:13:15
    已采纳

    这条语句就是判断这2个对象的类的类型是否一样的。getClass()是this对象的类的类型,就是调用这个方法的对象。

    obj.getClass()是参数传递过来的对象的类的类型,就是你要比较目标的类的类型。

    举个例子吧:

    还是Dog这个类,你重写了equals方法。重写的目的是当使用blackDog对象的时候,你发现还有一个叫whiteDog的对象,你想比较他俩是否相等。如果不重写equals方法,只能他俩的地址值相同,但实际上你想比较的是名字、性别、品种什么的是否相同。那当你使用这句boolean flag=blackDog.equals(whiteDog);的时候,"if (getClass() != obj.getClass())" 这里第一个getClass()就是blackDog调用的,obj.getClass就是 whiteDog调用的。

    (Dog blackDog=new Dog();whiteDog不是你创建的,所以你不清楚他是什么类)

    class Dog{

       public boolean equals(object obj){

      }

    }

    末日黑龙 回复comeon...

    比如我的dog类是这样写的class Dog{public void eat(){}},就是只有一个eat的方法。但是我创建对象的时候,我是用Object whiteDog=new Dog();这样写没错吧,这个whiteDog对java来说是Object类型,但我们知道它实际构造的是Dog的对象。如果我们想用whiteDog的eat()方法,直接写whiteDog.eat()是不行的,因为Object没有eat()方法。所以我们做一下转换(Dog)whiteDog.eat()就可以了。

    2015-08-10 14:03:26

    共 5 条回复 >

  • 末日黑龙
    2015-07-30 20:18:22

    比如说Dog类里面有name这个属性吧。

    传递进来的是Object类的对象吧,Object对象可是没有name这个属性的,那该怎么比较呢?所以首先要判断类是否一样,如果都是Dog了,那就都有name属性了,但传递进来的是Object对象,想调用的话不强转是不能调用的。

    qq__87...

    if (getClass() != obj.getClass()) return false; 这个是用来判断类型一样的么?判断的是哪两个的类型呢?

    2015-07-30 20:33:21

    共 1 条回复 >

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530559 学习 · 6091 问题

查看课程

相似问题