为了账号安全,请及时绑定邮箱和手机立即绑定

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

http://img1.sycdn.imooc.com//5e7a2b7100018ff809920306.jpg

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

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

正在回答

4 回答

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

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


0 回复 有任何疑惑可以回复我~
#1

奶尤糯米团子 提问者

好的谢谢
2020-03-26 回复 有任何疑惑可以回复我~

其实讲的这个重写的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;
        }
    }
}


0 回复 有任何疑惑可以回复我~

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


0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

奶尤糯米团子 提问者

哦哦哦对 有点忘了哈哈
2020-03-25 回复 有任何疑惑可以回复我~
#2

慕斯卡7563590 回复 奶尤糯米团子 提问者

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

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信