equals方法重载

equals方法重载

public boolean equals(Animal obj) {
        if(obj==null)
            return false;
        if(this.getName().equals(obj.getName()) && (this.getMonth()==obj.getMonth()))
            return true;
        else
            return false;
    }

老师,上面equals方法是对课程里前面的:

public boolean equals(Object obj) {
        if(obj==null)
            return false;
        Animal temp=(Animal)obj;
        if(this.getName().equals(temp.getName()) && (this.getMonth()==temp.getMonth()))
            return true;
        else
            return false;
    }

这个方法的重载,方法名相同、参数列表不同,符合方法重载的定义。

那么,老师,1、既然Object类是所有类的父类,能不能省略去public boolean equals(Object obj)这个方法重写的方法,直接去重载父类的equals方法,一步到位呢?

2、如果传参时,传的不是Animal类的对象,而是别的类的对象,老师,程序运行会不会报错?

3、为什么传参,传的对象非的是同一个类的对象,要么都是Object类,要么都必须是Animal类的对象,才能去做比较?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,==比较的是内存地址是否相同。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

好帮手慕珊 2019-05-04 11:04:29

你好!下面分别回答你在回复中的几个问题:

1、this.getMonth()==obj.getMonth()中的==不换成equals(),getMonth()获取的值是数值类型,用==进行比较。getName()获取的是字符串,所以需要用equals()进行比较

2、关于重载,其实是子类继承了父类的方法,然后对子类从父类继承来的方法进行重载,所以还是在同一个类中。

3、如果不是同类对象,比较也是没有意义的,比如我们用Cat类的对象和Dog类的对象进行比较。关于报错问题,这里是类的定义,不报错,也就是没有编译错误,但是运行时会报错。如果调用时传递的是不同的对象,比如本来应该传递Cat对象,但却传递了Dog对象,而Dog对象没有getMonth()方法,那么运行时就会报错。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 提问者 鱼儿0001 #1
    1、如果非要用equals去做getMonth的比较,替换==,会不会报错? 2、equals方法的传的参数得是Objcet类对象,可是str2它是String类的对象。老师,我的意思在这里,传的不是Object类的对象而是String类的对象,却不报错。
    2019-05-05 11:41:05
  • 好帮手慕珊 回复 提问者 鱼儿0001 #2
    你好!如果getMonth()的返回值是基本数据类型,比如int,是会报错的。equals()是方法,需要用对象去调用。关于参数是父类Object,传参是子类的问题,我在其他问答下也给你回复了,按照语法规则去记忆,在多态部分和以后的学习中会看到应用。祝学习愉快!
    2019-05-05 14:33:27
  • 提问者 鱼儿0001 回复 好帮手慕珊 #3
    老师,在Animal类中,不管是重写还是重载的equals方法里, if(this.getName().equals(temp.getName()) && (this.getMonth()==temp.getMonth()))里,对于这部分 if(this.getName().equals(temp.getName())中的equals方法,1、调用的是String类中重写后的equals方法吧?2、它判断的是字符串内容是否相等?3、比较运算符,是否也称为关系运算符?4、对于getName()里的字符串,能不能使用==来进行比较?
    2019-05-05 15:09:19
好帮手慕阿满 2019-05-01 19:46:39

关于同学的问题回答如下:

1、可以。

2、如果传入其他类的对象,会报错。

3、同学是指参数类型是Object或者Animal类型吗?如果是参数是其他类型,会报错的,所以只能是Animal类型的参数或者Object类型的参数。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    老师,1、if(this.getName().equals(obj.getName()) && (this.getMonth()==obj.getMonth()))能不能把&&后面对年龄的比较写成: this.getMonth().equals(obj.getMonth()),使用equals替换==比较运算符,可以吗? 2、老师,子类重载父类方法,即便在子类的方法里根本没有父类的这个方法,而且重载规定必须在同类中,这也能重载?为什么违反重载的要求:必须在同一类中也能重载? 3、老师说,给equals方法传参,必须是同类对象,那么,在课程里,boolean flag=str1.equals(str2);,这里equals方法的传的参数得是Objcet类对象,可是str2它是String类的对象。根据老师上面讲的,传入其他类的对象会报错,那么在这里为什么不报错?
    2019-05-02 11:33:39
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师