一、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;
}
}