黑马程序员技术交流社区
标题:
复写equals()方法中的参数必须是Object类型的吗?
[打印本页]
作者:
申绪胜
时间:
2011-12-4 18:45
标题:
复写equals()方法中的参数必须是Object类型的吗?
本帖最后由 申绪胜 于 2011-12-4 22:14 编辑
public class Student {
private String name;
private int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public boolean equals(Student s){
return false;
}
public boolean equals(Object o){
return true;
}
public static void main(String[] args) {
Student s1=new Student("zhangsan",20);
Student s2=new Student("lisi",19);
System.out.println(s1.equals(s1));
}
}
复制代码
如上代码 我把参数改为了Student类型的 然后输出结果就为false了
可是我记得毕向东老师15-07 11分28秒时 说equals方法的参数类型只能是Object的
可是我这样写不但没报错 反而还调用了Student参数类型的方法
作者:
李盈科
时间:
2011-12-4 19:30
你这叫方法重载 overlaod了 先重写 再重载的过程 你穿的student类型 当然调用public boolean equals(Student s) 最好写成object
作者:
段波
时间:
2011-12-4 19:47
你只是在子类中重载了一个方法,我觉得还是叫开发工具帮忙吧,不要自己手动去写,直接右键source-->Generate hashCode() and equals()这样可以避免因重载带来的麻烦
作者:
申绪胜
时间:
2011-12-4 20:28
感觉楼上二位都没说到我心里,没说到点上...
作者:
许邦存
时间:
2011-12-4 21:33
老师说的并没有错,equals方法的参数类型只能是Object的 ,要重写的话函数应该是public boolean equals(Object o),但是你的 public boolean equals(Student s)相当你自己写了一个新方法而不是重写object中的equals方法,因为你传的参数是student,那么就不是重写了,而是你自己定义的一个新方法。那么System.out.println(s1.equals(s1))调用的是你自己的方法public boolean equals(Student s),打印的结果就是false了。
作者:
郭学文
时间:
2011-12-4 21:38
本帖最后由 郭学文 于 2011-12-4 21:39 编辑
System.out.println(((Object)s1).equals((Object)s1));
你打印这句再想想就明白了
作者:
王德云
时间:
2011-12-4 21:54
equals方法有很多很种,不可能equals方法的参数只能只写Object,例如:在Arrays工具类中就有很多,建议参考API文档.
你如果在你目前这个类写Object代表覆写或重写,你可以在上面加上注解"@Override",编译器没报错就对了.
你如果写成Student代表的是方法的重载,表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。这也是Java面向对象的三大特征之一多态.
作者:
韩军博
时间:
2011-12-4 21:56
本帖最后由 韩军博 于 2011-12-4 21:59 编辑
1.楼主没有弄清楚Override 和OverLoad。
如果是Override的话,则父类中的方法不能是私有的,且子类中写的覆盖方法的方法名,方法返回的类型,参数的个数,参数的类型,以及顺序等等
都要和父类中的相同。
楼主可以在子类的方法上加上注解@Override.这样Eclipse就可以自动检测子类中的方法是否覆盖父类中的方法(即写法是否有错误),
如果写的覆盖方法不正确的话,则编译都通不过。
2.Overload就是类中的某个方法除了和另一个方法参数有区别外,其他的都相同。因为子类自动从父类中继承了equals()方法,所以,你写的是
参数为Student实例的equals()方法只是一个重载的方法。
另外,如果两个方法只是返回值得类型不同的话,则不能叫做是重载。
作者:
申绪胜
时间:
2011-12-4 22:13
谢谢大家 我懂了!!{:soso_e113:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2