所有类的父类都是都是object.继承时都是要默认继承object这个类.
object中的equals方法.他的参数是boolean equals(Object obj)如果覆盖这个类的话为什么我的参数还要写成(Object obj)?
class student
{
String name;
int age;
public boolean equals(Object obj)
{
student st=null;
if(obj instanceof student)
{
st=(student)obj;
}
else
{
return false;
}
if(st.name==this.name && st.age==this.age)
{
return true;
}
else
return false;

}
}
class xue
{
public static void main(String [] args)
{
student p=new student();
student q=new student();
p.name="zhangsan";
p.age=20;
q.name="zhangsan";
q.age=20;
if(p.equals(q))
System.out.println("p=q");
else
System.out.println("p!=q");
}
}
我知道在在写父类时并不知道子类的名字叫什么.但为什么就要传递Object obj这样的参数?就因为父类中这样写的?所以我们继承了重写时候也必须这样写?

解决方案 »

  1.   

    怎么着才算重写(Override)呢?
    1,方法名一样,
    2,方法参数一样,
    3,返回值合法(一样,或者是covariant type)。读书吧。
      

  2.   

    对。override要求子类方法的signature(方法头)要与父类的完全一致。
    如果你在你的student类里面只定义方法public boolean equals(student stu),则student类还是会继承Object类的equals方法,而新的定义的equals方法与继承来的equals方法形成重载的关系。
      

  3.   

    况且
    还有个问题,即使是不同的对象,也可以用equals进行比较
    不过经常对同类型对象进行对比