哪位大虾帮我找找错误,我想覆盖Object类的equals()方法 祖先的 equals是public的,你在子类中想要覆盖祖先的方法是不能比祖先的访问权限低。你不能在子类中把equals定义为 默认级别(package级)boolean equals(Object obj) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 java.lang.Object 中的equals() 方法是public ,所以你重写的时候也必须是public.因为重写方法的访问权限必须等于或宽于父类的. boolean equals(Object obj)应该写成public boolean equals(Object obj) public boolean equals(Object obj){ return (obj instanceof Student) && ((this.name==((Student)obj).name)?true:(this.age==((Student)obj).age?true:false));} st.name==this.name上面的问题改了,这块要注意要不不会返回你想象的值的 1、应该为public2、比较方式不对!譬如name应该用equals方法比较; 在equals()中,对象的比较用equals,基本型别用==。此外,建议将equals稍做修改,否则如果有类继承自该Student,将不会得到楼主想要的结果。比如: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.equals(this.name) && st.age==this.age) return true; else return false; } public static void main(String[] args) { Student p=new Student(); Student q=new Student(); p.name=new String("xyz"); p.age=13; q.name=new String("xyz"); q.age=13; if(p.equals(q)) System.out.println("p 与 q 相等"); else System.out.println("p 与 q 不等"); Student g = new Graduate("xyz", 13); System.out.println("q.eauls(g) :" + q.equals(g)); }}class Graduate extends Student { //大学生类 private String major = ""; Graduate(String name, int age) { this.name = name; this.age = age; } public boolean equals(Object obj) { if (!super.equals(obj)) return false; Graduate g = (Graduate)obj; return major.equals(g.major); }}结果:p 与 q 相等q.eauls(g) :true //这里应该是false才对修改Student的equals()如下即可:public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if(getClass()!= obj.getClass()) return false; Student s = (Student)obj; return name.equals(s.name) && age == s.age;} if the st.name is null, what will happen in your equals method? hehe 关于GridLayout的问题 紧急求救,关于java String的问题 经典作品--Java解惑谜题连载② ?显示错误需要类“ConsoleApplication1.Program”的显式封闭实例来实例化内部类 时间的转换问题 送分:CVSNT服务器的简单问题 用Java能不能做车牌识别系统? 一类文件反编译后,怎么看不懂了??而且再编译,也通不过,急啊~~~ JAVA如何使用各种端口 Access的ODBC Driver是不是不支持多个连接的更新操作 Java串口通讯,为什么列不出串口和并口? dialog的问题?
应该写成
public boolean equals(Object obj)
return (obj instanceof Student) && ((this.name==((Student)obj).name)?true:(this.age==((Student)obj).age?true:false));
}
要不不会返回你想象的值的
2、比较方式不对!譬如name应该用equals方法比较;
此外,建议将equals稍做修改,否则如果有类继承自该Student,将不会得到楼主想要的结果。
比如:
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.equals(this.name) && st.age==this.age)
return true;
else
return false;
}
public static void main(String[] args) {
Student p=new Student();
Student q=new Student();
p.name=new String("xyz");
p.age=13;
q.name=new String("xyz");
q.age=13;
if(p.equals(q))
System.out.println("p 与 q 相等");
else
System.out.println("p 与 q 不等"); Student g = new Graduate("xyz", 13);
System.out.println("q.eauls(g) :" + q.equals(g));
}
}class Graduate extends Student { //大学生类
private String major = "";
Graduate(String name, int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object obj) {
if (!super.equals(obj)) return false;
Graduate g = (Graduate)obj;
return major.equals(g.major);
}
}结果:
p 与 q 相等
q.eauls(g) :true //这里应该是false才对修改Student的equals()如下即可:
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if(getClass()!= obj.getClass()) return false;
Student s = (Student)obj;
return name.equals(s.name) && age == s.age;
}