黑马程序员技术交流社区

标题: 自定义equals问题 [打印本页]

作者: ggflxb    时间: 2014-7-9 15:21
标题: 自定义equals问题
  1. class  Student2
  2. {
  3.         String name;
  4.         int age;
  5.         boolean equals(Object obj)
  6.         {
  7.                 Student2 st = null;
  8.                 if(obj instanceof Student2)
  9.                         st = (Student2)obj;
  10.                 else
  11.                         return false;
  12.                 if(st.name==this.name&&st.age==this.age)
  13.                         return true;
  14.                 else
  15.                         return false;
  16.         }
  17.         public static void main(String[] args)
  18.         {
  19.                 Student2 p = new Student2();
  20.                 Student2 q = new Student2();
  21.                 p.name = "xyz";
  22.                 p.age = 13;
  23.                 q.name = "xyz";
  24.                 q.age = 13;
  25.                 if(p.equals(q))
  26.                         System.out.println("p与q相等");
  27.                 else
  28.                         System.out.println("p与q不等");
  29.         }
  30. }
复制代码


代码中用equals为什么会报错啊,而用equal就可以运行,求解?
作者: Darkhorse′Xa    时间: 2014-7-9 15:23
本帖最后由 Darkhorse′Xa 于 2014-7-9 15:29 编辑

注意:要想重写必须要跟父类的方法一模一样,Object类当中equal方法为:public boolean equals(Object obj),而你的访问修饰符是默认的,子类重写父类的方法访问修饰符权限必须大于或者等于,所以加个public就可以了.而equal是你自己定义的方法当然是可以运行的!跟equals方法是没有任何关系的
作者: ggflxb    时间: 2014-7-9 15:49
Darkhorse′Xa 发表于 2014-7-9 15:23
注意:要想重写必须要跟父类的方法一模一样,Object类当中equal方法为:public boolean equals(Object obj),而 ...

恩,谢谢,懂了
作者: lancerjs    时间: 2014-7-9 15:50
Object中的equals方法
public boolean equals(Object obj)
你的equals方法
boolean equals(Object obj)

覆盖父类方法必须使用大于父类方法的权限修饰符,默认(default)权限小于public权限,所以报错.
作者: cheye0207    时间: 2014-7-10 01:28
权限不够
作者: e644638045    时间: 2014-7-10 05:23
嘻嘻嘻嘻嘻
作者: 郑飞    时间: 2014-7-10 08:21
有老师说过重写一定直接复制API的方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2