比较两个对象的内容是否相等 重写object 的equals方法

时间:2021-12-06 16:11:43
import java.util.ArrayList;


class A1{
  public void fun1() {
    System.out.println("方法一");
  }
  
  public void fun2() {
    System.out.println("方法2");
  }
}


class B1 extends A1{
  public void fun1(){
    System.out.println("重写A1的方法1");
  }
  public void fun2(){
    System.out.println("重写A1的方法2");
  }
}




class D1 extends Object {
  private int age ;
  private String name;
  public D1() {
    // TODO Auto-generated constructor stub
  }
  public  D1(String name,int age) {
    this.name = name;
    this.age = age;
  }
  //比较两个对象的内容是否相等 重写object 的equals方法
  @Override
  public boolean equals(Object obj) {
    D1 d1 = null;
    if (obj instanceof D1) {//如果传进来的对象是D1的子类那么就对属性做比较
      d1 = (D1) obj;
      if (d1.name == name && d1.age == age) 
        return true;
      else 
        return false;
    }else 
      return false;
  }
  
  
}








public class Test {
  public static void main(String[] args) {
   /* B1 b1 = new B1();
    //callA(b1);
    A1 a = b1;//子类能自动的转换成父类
   // callA(a);
    
    A1 a1 = new A1();
    callA(a1);*/
    D1 d1 = new D1("张三", 10);
    D1 d2 = new D1("张三", 10);
    D1 d3 = new D1("李四", 10);
    if (d1.equals(d2)) {
      System.out.println("d1和d2是相同的");
    }
    if (d1.equals(d3)) {
      System.out.println("d1和d3是相同的");
    }else {
      System.out.println("d1和d3是不相同的");
    }
    
  }
  
  //编译器自动将 类B1转换成A1类型
  public static void callA(A1 a1){
    
    a1.fun1();
    a1.fun2();
   /* 
    B1 b1 = (B1) a1;//强制类型转换
    b1.fun1();
    b1.fun2();
    B1 b1 = a1;
    b1.fun1();
    b1.fun2();// 这样是错误的
*/  }
  
  

}

打印结果:

d1和d2是相同的
d1和d3是不相同的