黑马程序员技术交流社区
标题:
Person p = (Person)obj; 赋值是什么类型用意在何处
[打印本页]
作者:
askyle
时间:
2013-5-23 10:55
标题:
Person p = (Person)obj; 赋值是什么类型用意在何处
本帖最后由 askyle 于 2013-5-27 10:13 编辑
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
// 这里 (Person)obj; 代表什么意思 我一时理解不了?求解
//System.out.println(this.name+"....."+p.name);
return this.name.equals(p.name) && this.age == p.age;
}
/**/
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
Person p = (Person)obj;
// 这里 (Person)obj; 代表什么意思用意在何处 我一时理解不了?求解
作者:
风云
时间:
2013-5-23 11:03
是一个强转的动作,意思就是将obj类型强制转换成Person类型
作者:
张世威
时间:
2013-5-23 11:11
if(!(obj instanceof Person))
return false;
//①通过这句,排除非Person实例,剩下的都是Person类或者其子类对象了。
Person p = (Person)obj;
// 这里 (Person)obj; 代表什么意思 我一时理解不了?求解
//②obj有可能是Person子类对象,将其强制转换成Person类对象。这样就可以把obj变成一个完完全全的 Person对象了。只有相同类型的对象,才可以比较其属性值,看其是否有相同的属性值。不同类型的对象,比较其属性值好像没有意义吧,比如车子的长度和人的高度比较、动物的重量和猫的重量。
//System.out.println(this.name+"....."+p.name);
return this.name.equals(p.name) && this.age == p.age;
作者:
刘治广
时间:
2013-5-23 11:13
强制转换类型
作者:
谢孔营
时间:
2013-5-23 11:20
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(
Object obj
)//
这里可能用到了多态的向上转型,不需要强制转换
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj; // 这里 (Person)obj; 代表什么意思 我一时理解不了?求解:
答:这里用到了向下转型,即转为子类型,需要强制转换,这样子类的特有功能才能使用
//System.out.println(this.name+"....."+p.name);
return this.name.equals(p.name) && this.age == p.age;
}
/**/
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
作者:
kimi
时间:
2013-5-23 12:19
一开始是对象,把对象转为person 类型
作者:
火之意志
时间:
2013-5-23 13:09
通俗一点说就是:子类到父类是自动类型转换,也就是向上类型转换,父类到子类需要强制类型转换,前提这种强制类型转换是涉及多态,这个父类的引用对象的本质必须是子类的对象(或实例)才能转换成功。这里只拿类说事,接口也类似。
作者:
王靖远
时间:
2013-5-23 14:13
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))//判断传入的对象是不是Person的实例
return false;//如果不是返回false
Person p = (Person)obj; // 将obj强制转换成Person类对象,因为bj是Person的实例,也就有可能是其子类对象。这样才能和Person类进行比较。
//System.out.println(this.name+"....."+p.name);
return this.name.equals(p.name) && this.age == p.age;
}
/**/
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
Person p = (Person)obj; // 这里 (Person)obj; 代表什么意思用意在何处 我一时理解不了?求解
作者:
eycrckag
时间:
2013-5-23 18:20
强制转换,,会出现多态。。。
和 父类指向子类引用的效果是一样的。。
作者:
悟佛修道
时间:
2013-5-23 21:47
public boolean equals(Object obj) 这里的参数类型是父类Object ,那么你传入person后就自动向上提升到了父类类型,也就是说传进来person后
就相当于是object obj=new person()父类引用指向子类对象。
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj; // 这里 (Person)obj; 代表什么意思 我一时理解不了?求解
而这句话就是接着上面object obj=new person()这句的向下转型,因为当父类引用指向子类对象时,要调用子类里面的方法,必须向下转型。
(Person)obj就是把obj这个父类引用转换成前面括号里面的person子类对象。还记得强制转换类型吗?比如在整数前面加个(char)就是强制转换成char类型,跟这个一个道理。
作者:
刘胜寒
时间:
2013-5-24 00:46
楼主你好,如果问题以解决,请修改分类,谢谢合作。
作者:
袁梦希
时间:
2013-5-24 00:49
楼主你好,如果问题以解决,请修改分类,谢谢合作。
作者:
小石头39910
时间:
2013-5-24 17:26
public boolean equals(Object obj)
{
if(!(obj instanceof Person))//用instanceof关键字判断obj是不是Person的对象,如果不是的话就返回false
return false;
Person p = (Person)obj; //判断obj是Person的对象,但是obj通过equals传的Object的一个对象,所以这里就涉及到了类型的转换问题,这里是高级类型向低类型转换,所以是向下转型 ,
//System.out.println(this.name+"....."+p.name);
return this.name.equals(p.name) && this.age == p.age;
}
作者:
Super_Class
时间:
2013-5-24 22:06
对象的转型只会自动向上转型。但是不会自动向下转型。所以需要显式的转型
作者:
影响力147753321
时间:
2013-5-26 08:55
是用来把传入object强转为person,因为前面排除了不是person的情况,所以可以向下转型为person,目的是用来调用子类person特有属性name和 age。
作者:
!=老王
时间:
2017-9-17 21:00
张世威 发表于 2013-5-23 11:11
if(!(obj instanceof Person))
return false; //①通过这句,排除非Person实例 ...
谢谢____________________________!
作者:
!=老王
时间:
2017-9-17 21:01
感谢分享!!!!!!!!!!!!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2