1.根父类(Object)
- 类java.lang.Object类层次结构的根类,即其他所有类的父类.每个类都使用Object作为父类.
- Object类型的变量与除Object以外的任何引用类型的对象都存在多态引用.(method(Object obj)可以接受任何类类型的对象作为参数)
2.重写equals()方法
- 除Object类外任何类都直接或间接继承Object类,如果继承Object类的子类未重写equals方法,调用的则是Object中的equals方法.
Object类中的equals方法 public boolean equals(Object obj) { return (this == obj); }
- 但在实际开发中,针对于我们写的自定义的类,我们常常需要判断两个对象是否相等,此时主要判断的是两个对象的属性(内容)是否相等.(而非二者的引用)所以我们需要重写Object中的equals方法.
子类重写的equals方法 @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Order01 order01 = (Order01) o; return orderId == order01.orderId && Objects.equals(orderName, order01.orderName); } @Override public int hashCode() { return Objects.hash(orderId, orderName); }
例 :
public class Order01 { private int orderId; private String orderName; public int getOrderId() { return orderId; } public void setOrderId(int orderId) { this.orderId = orderId; } public String getOrderName() { return orderName; } public void setOrderName(String orderName) { this.orderName = orderName; } public Order01(int orderId, String orderName) { this.orderId = orderId; this.orderName = orderName; } public Order01() { } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Order01 order01 = (Order01) o; return orderId == order01.orderId && Objects.equals(orderName, order01.orderName); } @Override public int hashCode() { return Objects.hash(orderId, orderName); } }
public class Order01Text extends Order01 { public static void main(String[] args) { //如果未重写Object中的equals方法 //01,02分别指向不同的对象,所以打印false //如果我们重写的equals,我们需要判断二者属性是否相同,由于构造器的形参相同 //即使二者指向不同的对象,但由于内容相同,打印true Order01 o1 = new Order01(300,"XX"); Order01 o2 = new Order01(300,"XX"); System.out.println(o1.equals(o2));//true } }