一、Object类简介

Object:是类层次结构的根类,是所有对象的直接或者间接父类

该类中定义的是所有对象都具备的功能

二、Object类中方法简介

①equals方法:判断其他某个对象是否与此对象“相等”

DuoTai_Student项目中的BaseStudent类和Demo类

public boolean equals(Object obj)

 

 

 

public static void main(String[] args) {
    	/*
    	 * 判断其他某个对象是否与此对象“相等”
    	 */
    	BaseStudent  bs1=new BaseStudent();
    	BaseStudent  bs2=new BaseStudent();
    	bs1.equals(bs2);
    	System.out.println("bs1等于bs1?"+bs1.equals(bs2));
    	
    	BaseStudent  bs3=bs1;//引用赋值
    	bs3.equals(bs1);
    	System.out.println("bs3等于bs1?"+bs3.equals(bs1));
    	
    	System.out.println("bs2等于bs1?"+(bs3==bs2));
    	/*
    	 * 比较一个类中两个对象中的数值是否相等
    	 */
    	bs1.num=3;
    	bs2.num=3;
    	System.out.println("bs1.num等于bs2.num?"+bs1.equals(bs2));
        }
       

如果自定义类中也有比较相同的功能,没必要重新定义。

只要沿袭父类中的功能,建立自己特有比较内容即可,这就是覆盖(参数不能变)

 public boolean equals(Object obj) {

 

/*直接写this.num==obj.num不对,因为主函数中调用equals方法,Obiect obj=bs2;类型自动向上提升,

     * 对obj操作,只能操作Object类中有的东西,没有num变量,所以要将obj强制类型转换为BaseStudent类型,

     * 才能进行比较num大小

     */

 

 BaseStudent bs=(BaseStudent)obj;

    if(this.num==bs.num) {

    return true;

    }

    else

    return false;

}

}

 

但是以上的toString方法,BaseStudent对象调用传入其他类对象会出现错误

        AdvStudent as=new AdvStudent ();
         bs1.equals(as);
         System.out.println("bs1等于as?"+bs1.equals(as));
         错误:com.DuoTai_student.AdvStudent cannot be cast to com.DuoTai_student.BaseStudent
        
           但是上面的不同对象是否相同,这个判断本身就有点问题,猫==狗?这个逻辑有点问题,
          为了防止这种情况发生,equals(Object obj),方法内应该首先判断下这个是不是BaseStudent的实例
           若是,则判断是否相等,若不是,给出提示
          

 public boolean equals(Object obj) {
    	if(obj instanceof BaseStudent)
    	{
    	
    	BaseStudent bs=(BaseStudent)obj;
    	if(this.num==bs.num) {
    		return true;
    	}
    	else
    		return false;
       }
    	else {
    		return false;
    		
    	}
    }