我给Student对象创建的id属性都是private的,但我试过以后发现,这里为什么o.id才会返回正常结果呀?o是Student对象,不应该调用o.getId()才会返回正常比较结果嘛?
像这种重写的方法内部调用了该方法(这里重写compareTo()方法在53行调用了compareTo()方法),是默认调用重写前的方法吗?
重发下:翻了下以前的问答有这个重写的:第三行的comparaTo是原始没有被重写的(事实上到这里为止comparaTo没有被重写完成,所以使用的也不可能是重写的),这里之所以可以直接用,因为比较的两者是基本类型,this.id.compareTo(arg0.id,都是字符型。两个string做简单比较是不存在歧义不需要重写就可以实现的,只有当比较对象是Student这种复杂的,里面包含多个属性的类对象,原始的comparaTo才无法比较,需要重写。
一个是比较学生对象,一个是比较id
其实讲的这个重写的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; } } }
53行的comparaTo 是id这个属性的comparaTo方法,是String类自带的,和当前类中重写的comparaTo方法无关。属于两个不同类的两个同名方法。
private在本类中是可以直接调用的