呼叫大神 解迷惑

良辰美景月光杯 2013-05-13 07:15:46
比如在一个类Citizen中,我要重写equals(objest obj)方法,会用到这样一个语句
if(obj instanceof Citizen) {
Citizen another = (Citizen) obj);
name.equals(another.name)
}
我想问的是中间那个 Citizen another = (Citizen) obj 是什么意思?这里的Citizen
代表的类还是它的类型?为什么非得这样做之后才可以 .name ,而就不可以obj.name呢?
...全文
193 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wandefajin 2013-05-14
  • 打赏
  • 举报
回复
属性没有多态 谁调用就是谁的 你用obj obj 是Object的对象 输出的就是obj的name Citizen 是类型 你用another another是Citizen类型的对象 输出的就是another的name 大致思想就是这样
木安 2013-05-14
  • 打赏
  • 举报
回复
obj instanceof Citizen 其实就是看传入的是不是Citizen的实例,如果不是的话,就没有必要比较的了,肯定不会相等,如果是Citizen的实例的话,转换成Citizen的实例,才能取其中的属性作比较,这样才有比较的价值
yktd26 2013-05-14
  • 打赏
  • 举报
回复
因为Object类里边没有name这个属性或方法
lcf 2013-05-13
  • 打赏
  • 举报
回复
equals(Objest obj) 是Object类的方法,如果你要重写,只能也写成这样。Object没有name方法,你得转型之后才能用。为了安全转型用obj instanceof Citizen来看obj是不是一个Citizen对象。如果是才能转,不然就会报错(ClassCastException)。 Object是Citizen的父类这个不言而喻,不然你怎么重写它的方法?
PrisonBreak 2013-05-13
  • 打赏
  • 举报
回复
Object是所有类的最大父类。向下转型
结贴是美德 2013-05-13
  • 打赏
  • 举报
回复
能.出什么是要看.前面的类型的。
  • 打赏
  • 举报
回复
引用 1 楼 anshiny 的回复:
是类型转换。
我知道是类型转换,只是不明白这样做是为什么,为什么非得这样做
anshiny 2013-05-13
  • 打赏
  • 举报
回复
是类型转换。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧