日期:2014-05-20  浏览次数:20759 次

关于Equals的重写问题 为什么老是出错?
class A
{
private String name;
private String idstr;
public A(){}
 A(String name,String idstr)
{
this.name=name;
this.idstr=idstr;

}
public boolean equals(Object obj)
{
if (shis==obj)
{
return true;
}

if(obj!=null&&(obj.getclass()).eqauls (A.class))
{
A AObj=(A)obj;
if((this.getidstr()).equals(Aobj.getidstr()))
{
return true;

}
}
return false;
}
}

 public class B
{
public static void main(String[]args)
{
A p1=new A("孙悟空");
A p2=new Person("孙行者");
A p3=new A("孙悟饭");
System.out.println("p1,p2是否相等:"+p1.equals(p2));
System.out.println("p2,p3是否相等:"+p2.equals(p3));

}
}

------解决方案--------------------
我晕了,代码里面好多错啊,this写成shis, 私有成员变量,没有生成get,set方法,new对象时明明要传入两个参数,却只传入一个参数。。LZ先把那些最基础的东西搞明白吧。这样搞,会搞死人的。
------解决方案--------------------
我把你的修改了下,你自己看看,LS说的自动复写也可以,eclips有这样的功能。
Java code

class A {
    private String name;
    private String idstr;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getIdstr() {
        return idstr;
    }

    public void setIdstr(String idstr) {
        this.idstr = idstr;
    }

    public A() {
    }

    A(String name, String idstr) {
        this.name = name;
        this.idstr = idstr;

    }

    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }

        if (obj != null && (obj instanceof A)) {
            A AObj = (A) obj;
            System.out.println(AObj.idstr);
            if ((this.idstr).equals(AObj.idstr)) {
                return true;

            }
        }
        return false;
    }
}

public class B {
    public static void main(String[] args) {
        A p1 = new A("孙悟空", "shanghai");
        A p2 = new A("孙行者", "xi'an");
        A p3 = new A("孙悟饭", "shanghai");
        System.out.println("p1,p2是否相等:" + p1.equals(p2));
        System.out.println("p2,p3是否相等:" + p2.equals(p3));
        System.out.println("p2,p3是否相等:" + p1.equals(p3));

    }
}

------解决方案--------------------
Java code

class A {
    private String name;
    private String idstr;
    public A(String name){
        this.name = name;
    }
    A(String name, String idstr) {
        this.name = name;
        this.idstr = idstr;
    }
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj != null && obj instanceof A) {
            A a = (A)obj;
            if (this.getName().equals(a.getName())){
                return true;
            }
        }
        return false;
    }
    public String getIdstr() {
        return idstr;
    }
    public void setIdstr(String idstr) {
        this.idstr = idstr;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
class Person1 extends A{
    
    public Person1(String name) {
        super(name);
    }
}
public class B {
    public static void main(String[] args) {
        A p1 = new A("孙悟空");
        A p2 = new Person1("孙悟空");
        A p3 = new A("孙悟饭");
        System.out.println("p1,p2是否相等:" + p1.equals(p2));
        System.out.println("p2,p3是否相等:" + p2.equals(p3));
    }
}
//楼主好好打基础,基础不行,写代码会很累的。