比如在一个类Citizen中,我要重写equals(objest obj)方法,会用到这样一个语句
if(obj instanceof Citizen) {
   Citizen another = (Citizen) obj);
   name.equals(another.name)
}
我想问的是中间那个 Citizen another = (Citizen) obj 是什么意思?这里的Citizen
代表的类还是它的类型?为什么非得这样做之后才可以 .name ,而就不可以obj.name呢?

解决方案 »

  1.   

    Object是所有类的最大父类。向下转型
      

  2.   

    equals(Objest obj) 是Object类的方法,如果你要重写,只能也写成这样。Object没有name方法,你得转型之后才能用。为了安全转型用obj instanceof Citizen来看obj是不是一个Citizen对象。如果是才能转,不然就会报错(ClassCastException)。
    Object是Citizen的父类这个不言而喻,不然你怎么重写它的方法?
      

  3.   

    因为Object类里边没有name这个属性或方法
      

  4.   

    obj instanceof Citizen 其实就是看传入的是不是Citizen的实例,如果不是的话,就没有必要比较的了,肯定不会相等,如果是Citizen的实例的话,转换成Citizen的实例,才能取其中的属性作比较,这样才有比较的价值
      

  5.   

    属性没有多态 谁调用就是谁的 你用obj obj 是Object的对象 输出的就是obj的name
    Citizen 是类型
    你用another  another是Citizen类型的对象 输出的就是another的name
    大致思想就是这样