A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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; 代表什么意思用意在何处 我一时理解不了?求解

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

16 个回复

倒序浏览
是一个强转的动作,意思就是将obj类型强制转换成Person类型
回复 使用道具 举报 1 0
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;

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
强制转换类型
回复 使用道具 举报
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;
        }
}

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
kimi 来自手机 中级黑马 2013-5-23 12:19:04
地板
一开始是对象,把对象转为person 类型
回复 使用道具 举报
通俗一点说就是:子类到父类是自动类型转换,也就是向上类型转换,父类到子类需要强制类型转换,前提这种强制类型转换是涉及多态,这个父类的引用对象的本质必须是子类的对象(或实例)才能转换成功。这里只拿类说事,接口也类似。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
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; 代表什么意思用意在何处 我一时理解不了?求解

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
强制转换,,会出现多态。。。
和  父类指向子类引用的效果是一样的。。

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报 1 0
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类型,跟这个一个道理。


评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
楼主你好,如果问题以解决,请修改分类,谢谢合作。
回复 使用道具 举报
楼主你好,如果问题以解决,请修改分类,谢谢合作。
回复 使用道具 举报
   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;
        }
回复 使用道具 举报
对象的转型只会自动向上转型。但是不会自动向下转型。所以需要显式的转型

回复 使用道具 举报
是用来把传入object强转为person,因为前面排除了不是person的情况,所以可以向下转型为person,目的是用来调用子类person特有属性name和 age。
回复 使用道具 举报
张世威 发表于 2013-5-23 11:11
if(!(obj instanceof Person))
                        return false;  //①通过这句,排除非Person实例 ...

谢谢____________________________!
回复 使用道具 举报
感谢分享!!!!!!!!!!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马