黑马程序员技术交流社区

标题: 这里面的强转是怎样完成的 [打印本页]

作者: ~(@^_^@)~    时间: 2013-4-18 09:54
标题: 这里面的强转是怎样完成的
public boolean equals(Object obj){
           if(this==obj)
         return true;
         if(obj instanceof Person){
          Person p =(Person)obj;
          return this.age > p.age;
          }
          return false;
        }
作者: 殇_心。    时间: 2013-4-18 10:35
怎么问个这么神奇的问题。
if(obj instanceof Person){
           Person p =(Person)obj;
    ...
}
这里判断如果obj是Person对象的话  就强制转换。
没搞懂到底楼主到底要表达什么意思。
作者: 李芳池    时间: 2013-4-18 11:27
楼主的这段代码是要判断Person类中年龄的大小的,
  if(this==obj)
         return true;
这个是一个健壮性判断,当传入的是本类对象返回true;
if(obj instanceof Person){
          Person p =(Person)obj;//这里就是楼主所说的强转,你如果没有强转Person p=obj;编译器报错,因为JVM无法识别obj是否为person类,所以需要强转;
          return this.age > p.age;
          }
作者: Miss小强    时间: 2013-4-18 11:32
不理解楼主的意思。。。
作者: HM张健    时间: 2013-4-18 13:05
//equals方法的重写
public boolean equals(Object obj){
           if(this==obj)//判断对象与本对象是否是同一个对象
         return true;
         if(obj instanceof Person){//判断对象是否是与Person类相同的类或其子类
          Person p =(Person)obj;//运行到这里代表obj是person类或其子类 可以强制转换为Person类型对象
          return this.age > p.age;//通过比较对象年龄属性来判断某一实例是否是该对类的实例
          }
          return false;
        }

以上完毕

作者: 姓名长度不符    时间: 2013-4-18 13:07
本帖最后由 姓名长度不符 于 2013-4-18 13:10 编辑

这其实是对象转型问题,而且是向下转型,就以这个列子,向下转型编译运行都不会报错
毕竟,Preson继承自Object
这里要用到向下转型的原因是要调用参数的age,Object不一定会有,只有Person和其子类才会有,所以不转型的话会报错
但是向下转型一般不用,所以通常用泛型或者加判断语句来避免类型转换
如果是想了解它底层到底是如何实现的,我认为参考多态就是了,多态是父类应用指向子类对象,这里反过来

作者: CrazyProgram    时间: 2013-4-18 13:25
public boolean equals(Object obj){
           if(this==obj)
         return true;
         if(obj instanceof Person){//所有对象都有一个共同的父类就是Object
          Person p =(Person)obj;//向下转型,把Object类型转成你需要的类型,这里LZ指定的是Person类型,
          return this.age > p.age;
          }
          return false;
        }
作者: ~(@^_^@)~    时间: 2013-4-18 13:53
不好意思啊,各位,没让你们明白咋回事...
当时忘记那个转型叫啥了,就是向下转型.....
谢谢各位的答复!!
作者: 刘兆华    时间: 2013-4-21 16:25
  他是的意思是: 判断传入的对象是不是类,是就返回true , 然后判断传入的类是不是Person的子类  是就判断传入类的属性age是否小于调用本方法类的age    不过我想说一下 你这么写,应该就是个病 。 如果符合第一个If了   那么接下来的条件都不会判断了。  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2