覆盖 equals 时遵守通用约定

  • 自反性:对于任何非 null 的引用值 x,x.equals(x) 总是 true
  • 对称性:对于任何非 null 的引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 必须返回 true
  • 传递性:x.equals(y) 以及 y.equals(z) 返回 true 时,x.equals(z) 也必须是 true
  • 一致性:只要 equals 的操作对象中所用的信息没有被修改,多次调用 equals 就必须返回一致结果
  • 对于非 null 的引用值 x,x.equals(null) 必须返回 false

覆盖 equals 时总要覆盖 hashCode

始终覆盖 toString()

toString() 通用约定指出,被返回的字符串应该是一个简洁、信息丰富、易于阅读的

谨慎覆盖 clone()

  • 超出语言之外的对象创建机制,对象的创建需要通过构造函数
  • 如果一个类的子类覆盖了 clone() 函数,就应该调用 super.clone() 返回该子类对象。如果此时父类中的 clone() 函数中没有通过调用 super.clone() 返回对象,而是通过构造器,此时子类执行 clone() 函数返回的对象类型就和子类类型不一致
  • 如果要 clone 一个对象中的引用类型对象,那么该引用类型对象最好是唯一的不可变的,否则该对象中变量不能用 final 修饰,需要对该引用类型对象进行深拷贝

考虑实现 Comparable 接口

当对象小于、等于或大于指定对象时,分别返回一个负整数,0或正整数
需要遵循以下规则:

1
2
A.compareTo(B) == 0;
A.equals(B) = true;