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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 瓶中人 中级黑马   /  2013-10-21 01:18  /  2065 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Cat
{
        private String name;
        private int age;
        private double weight;
        private Color color;
        public Cat(String name , int age , double weight , Color color){
            this.name = name;
                this.age = age;
                this.weight = weight;
                this.color = color;
        }
        public boolean equals(Object obj){
            if(this == obj){
                   return true;
                }
                if(obj == null){
                   return false;
                }
                if(this.getClass() != obj.getClass()){
                   return false;
                }
                Cat cat = (Cat)obj;
                return name.equals(cat.name)&&(age == cat.age)&&(weight == cat.weight) && (color.equals(cat.color));
        }
最后的那段代码的equals()与重写后的equals()有什么关系!是不是重写的那个是专门给对象作比较的?还有
this.getClass()有没有this貌似都差不多,为什么呢?

评分

参与人数 1技术分 +1 收起 理由
曹秀云 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
本帖最后由 未知数|X| 于 2013-10-21 06:51 编辑

所谓重写就是函数名一样接收参数一样并在里面重写自己内容分,你的这个equals本身就是重写后的方法 ,this是隐身指针,函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,也就是说在没有同名情况下,this关键字是隐身存在的可以省略,所以this.getClass()可以省略掉,就像:
private  String name="张三";//在没有同名的情况下
public  void printName()
{
System.out.println(name);
System.out.println(this.name);//这个两个的输出结果是一样的
}

评分

参与人数 1技术分 +1 收起 理由
曹秀云 + 1 很给力!

查看全部评分

回复 使用道具 举报
最后这行代码
return name.equals(cat.name)&&(age == cat.age)&&(weight == cat.weight) && (color.equals(cat.color));
是用于返回equals比较后的值,equals用于比较对象是否相等,字符串的比较通常用equals方法来完成,因为每定义一个字符串,都相当于是创建了一个对象,所以,字符串的比较用equals方法,并且,要重写该方法,因为要定义自己特有的比较方式,不然其默认的比较方式是比较哈希值;
      关于this关键字的问题,在你的这个代码中,写不写this都没有区别,jvm会自动给你加上this关键字,它是指定对象位置,this是指向本类对象,但是在多线程和一些多对象传入的时候就要写this用以区分不同对象;
回复 使用道具 举报
getClass方法调用的其实就是this.getClass方法 因为在类的内部调用 所以省略的this关键字
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马