打字猴:1.7004422e+09
1700442200
1700442201 id=_id;
1700442202
1700442203 }
1700442204
1700442205 @Override
1700442206
1700442207 public boolean equals(Object obj){
1700442208
1700442209 if(obj instanceof Employee){
1700442210
1700442211 Employee e=(Employee)obj;
1700442212
1700442213 return super.equals(obj)&&e.getId()==id;
1700442214
1700442215 }
1700442216
1700442217 return false;
1700442218
1700442219 }
1700442220
1700442221 }
1700442222
1700442223 员工类增加了工号ID属性,同时也覆写了equals方法,只有在姓名和ID号都相同的情况下才表示是同一个员工,这是为了避免在一个公司中出现同名同姓员工的情况。看看上面的代码,这里校验条件已经相当完备了,应该不会再出错了,那我们编写一个main方法来看看,代码如下:
1700442224
1700442225 public static void main(String[]args){
1700442226
1700442227 Employee e1=new Employee(“张三”,100);
1700442228
1700442229 Employee e2=new Employee(“张三”,1001);
1700442230
1700442231 Person p1=new Person(“张三”);
1700442232
1700442233 System.out.println(p1.equals(e1));
1700442234
1700442235 System.out.println(p1.equals(e2));
1700442236
1700442237 System.out.println(e1.equals(e2));
1700442238
1700442239 }
1700442240
1700442241 上面定义了2个员工和1个社会闲杂人员,虽然他们同名同姓,但肯定不是同一个,输出应该都是false,那我们看看运行结果:
1700442242
1700442243 true
1700442244
1700442245 true
1700442246
1700442247 false
1700442248
1700442249 很不给力嘛,p1竟然等于e1,也等于e2,为什么不是同一个类的两个实例竟然也会相等呢?这很简单,因为p1.equals(e1)是调用父类Person的equals方法进行判断的,它使用instanceof关键字检查e1是否是Person的实例,由于两者存在继承关系,那结果当然是true了,相等也就没有任何问题了,但是反过来就不成立了,e1或e2可不等于p1,这也是违反对称性原则的一个典型案例。
[ 上一页 ]  [ :1.7004422e+09 ]  [ 下一页 ]