关于重写compareTo()方法的疑问

来源:6-8 学生选课--- 实现学生序列排序

奶尤糯米团子

2020-03-24 23:49

http://img.mukewang.com/5e7a2b7100018ff809920306.jpg

我给Student对象创建的id属性都是private的,但我试过以后发现,这里为什么o.id才会返回正常结果呀?o是Student对象,不应该调用o.getId()才会返回正常比较结果嘛?

像这种重写的方法内部调用了该方法(这里重写compareTo()方法在53行调用了compareTo()方法),是默认调用重写前的方法吗?

写回答 关注

4回答

  • 慕斯卡7563590
    2020-03-25 22:17:43
    已采纳

    重发下:翻了下以前的问答有这个重写的:第三行的comparaTo是原始没有被重写的(事实上到这里为止comparaTo没有被重写完成,所以使用的也不可能是重写的),这里之所以可以直接用,因为比较的两者是基本类型,this.id.compareTo(arg0.id,都是字符型。两个string做简单比较是不存在歧义不需要重写就可以实现的,只有当比较对象是Student这种复杂的,里面包含多个属性的类对象,原始的comparaTo才无法比较,需要重写。

    一个是比较学生对象,一个是比较id


    奶尤糯米团子

    好的谢谢

    2020-03-26 15:47:46

    共 1 条回复 >

  • 流光记
    2020-12-24 21:01:25

    其实讲的这个重写的Compare方法有些过于简单了,可以尝试下用Student.name的长度进行判断,这样大家更能理解。

     @Override
        public int compareTo(Student o) {
            if(this.name.length()>o.name.length())
            {
                return 1;
            }
            else if (this.name.length()<o.name.length())
            {
                return -1;
            }
    
            else{
                return 0;
            }
        }
    }


  • 旧日探索者
    2020-04-19 17:34:15

    53行的comparaTo 是id这个属性的comparaTo方法,是String类自带的,和当前类中重写的comparaTo方法无关。属于两个不同类的两个同名方法。


  • 慕斯卡7563590
    2020-03-25 10:36:26

    private在本类中是可以直接调用的

    慕斯卡756... 回复奶尤糯米团子

    第三行的comparaTo是原始没有被重写的(事实上到这里为止comparaTo没有被重写完成,所以使用的也不可能是重写的),这里之所以可以直接用,因为比较的两者是基本类型,this.id.compareTo(arg0.id,都是字符型。两个string做简单比较是不存在歧义不需要重写就可以实现的,只有当比较对象是Student这种复杂的,里面包含多个属性的类对象,原始的comparaTo才无法比较,需要重写。 一个是比较学生对象,一个是比较id

    2020-03-25 22:15:30

    共 2 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题