黑马程序员技术交流社区
标题:
这里面的强转是怎样完成的
[打印本页]
作者:
~(@^_^@)~
时间:
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