对于2-2本节课最后的一点问题

对于2-2本节课最后的一点问题

1、在课程里,写了两个equals方法,一个是对Object类equals方法的重写,一个是对重写后的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;
    }
    
    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;
    }

在测试类里,

        Animal one=new Animal("花花",2);
        Animal two=new Animal("花花",2);
        boolean flag=one.equals(two);

声明实例化两个Animal的对象one、two,one调用equals方法与two做比较,那么,我糊涂的是两个equals方法看起来都能被one调用,在这里调用的是哪一个方法?为什么会调用这个equals方法而不是那个equals方法?

2、子类可以通过重写equals方法的形式,改变比较的内容。

那么,老师,子类是否能通过重载父类equals方法的形式,也实现改变比较的内容?因为看起来,重载可以改变参数、改变方法体内的内容,似乎没问题,但是我不确定。

还有,老师,我们可以直接重载父类的方法吗?因为重载的要求之一是:必须在同一类中才能重载!

3、老师,当我们不重写Objcet类的equals方法,直接继承Object中的equals方法,euqals后面括号里的参数得是Objce类的对象才行,那么,把Animal的对象two传进去去做比较,岂不是问题?何况one调用euqals时,one自己也是Animal的对象,这是怎么回事?


正在回答

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

1回答

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

1、调用的重载的equals()方法,因为传入的参数时Animal类型的,所以调用的时重载的equals()方法,

2、可以重载equals()方法改变比较的内容。可以直接重载父类的方法,这样相当于因此了重写的方法。

3、不重写equalse()方法也是可以的。这里可以隐式将Animal类型转换为Object类型进行调用equals(),这些将在多态中讲到。同学可以继续向后学习。

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

  • 鱼儿0001 提问者 #1
    老师,1、我提了许多问题在不同的页面上,我感觉你回答的有点敷衍,讲个结论就完事,我要的是一个解释。我在第二个问题最后,有个小问题,卡了我很久,我问:还有,老师,我们可以直接重载父类的方法吗?因为重载的要求之一是,必须在同一类中才能重载!老师能具体解释下吗,其他页面上的问题你多少也是这样,讲个结论就撤了。2、老师你说,调用的重载的equals()方法,因为传入的参数时Animal类型的,所以调用的时重载的equals()方法。如果此时我只写了重写,没有重载,那么,就只能调重写,对吧?“因为传入的参数时Animal类型”这句话好像就不是万能的,不是Objcet类型的对象,程序照样正常,为什么,我感觉自己就是不能理解,卡死在这里了。
    2019-05-02 12:07:15
  • 好帮手慕珊 回复 提问者 鱼儿0001 #2
    你好!关于重载的问题,这里其实对子类从父类继承下来的方法进行重载,所以还是在同一个类中。第二个问题,如果没有重载,只有重写,那么肯定是调用重写的。多个重载方法调用时,肯定会先调用类型最匹配的,所以会调用Animal作为参数的方法。祝学习愉快!
    2019-05-04 11:17:40
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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