class C {
int i;
String j;
public C(int i, String j) {this.i = i; this.j = j;}
// #1
public boolean equals(Object o) {
if (null == o) return false;
if (o instanceof C) {
C c = (C) o;
return this.i == c.i && this.j.equals(c.j);
}
return false;
}
/* // #2
public boolean equals(C o) {
if (null == o) return false;
return this.i == o.i && this.j.equals(o.j);
} */
}
class Ce extends C {
int a;
public Ce(int i, String j, int a) {
super(i, j);
this.a = a;
}
/* // #3
public boolean equals(Object o) {
if (null == o) return false;
if (o instanceof Ce) {
Ce c = (Ce) o;
return this.i == c.i && this.j.equals(c.j) && this.a == c.a;
}
return false;
} */
/* // #4
public boolean equals(Ce o) {
if (null == o) return false;
return this.i == o.i && this.j.equals(o.j) && this.a = o.a;
} */
}
class Cn {
int i;
String j;
public Cn(int i, String j) {this.i = i; this.j = j;}
}
public class Test {
public static void main(String[] args) {
C o1 = new C(1, "o1");
Ce o2 = new Ce(1, "o1", 2);
Cn o3 = new Cn(1, "o1");
System.out.println(o1.equals(o2));
System.out.println(o2.equals(o1));
System.out.println(o1.equals(o3));
}
}
代码#1是马士兵讲重写 equals() 方法时的例程,我当时想按代码#2的方法重写equals方法是否同样成立而且跟简洁呢?因为类型检查的任务推给传参去完成了,#2的方法并不是重写Object类的方法,而是重载,当要比较的对象是本类及其子类实例时会调用这个方法,如果不是则会调用Object类的equals方法(比较引用是否相同,更严苛),这在初步实验中是没有问题的。
但是,当子类照类似的写法 #4 “重写”equals的时候,错误就出现了,原因仍是在于它是重载而非重写。子类重写的意图是不能与父类对象equals,但是#4的写法会在要比较父类对象时“意外地”调用父类的equals方法从而返回true。只有#1和#3的写法才能符合要求。
这条弯路的教训是:看似笨拙的逻辑其实较少歧义,比较健壮,不要一味追求“精巧”的优美,毕竟在实际应用之前测出一个反例是十分困难的。
分享到:
相关推荐
在这场智慧与毅力的较量中,借鉴他人成功的经验,往往能够帮助我们规避不必要的弯路,从而更快地接近目标。《高人点津:高考备战值得借鉴的20则经验作文.doc》这份文档,无疑为无数考生打开了视野,揭示了高考备考的...
教师和学长的指导对于新生来说无疑是宝贵的资源,他们提供的学习方法和经验能够帮助新生更好地适应大学的学习节奏,避免走弯路。同时,新生们也需要学会如何独立思考和处理问题,这对于他们未来的专业学习和个人发展...
通过学习和借鉴模板,可以避免在文书撰写上走弯路。 4. **高含金量中英文面试模板**:面试是保研过程中的一大挑战,尤其是英文面试,对于测试学生的语言能力和逻辑思维能力具有极高要求。这些模板可能包含了常见...
作为刚刚踏入大学校园的新生,你们即将开始一段充满挑战与机遇的新旅程。在此,我想与你们分享一些经验,帮助你们更好地利用大学初期这段宝贵的时间,为未来打下坚实的基础。 大一是大学生活的一个关键时期。这一...
在教育的广阔田野上,实习教师的个人实习总结是一段值得铭记的经历。本文将回顾实习教师在实习期间的成长历程、面临的挑战以及收获的教学经验和对教育事业的深刻理解。 刚开始实习的阶段,对于新晋的教师来说充满了...
至少也是照猫画虎画了一段时间之后吧,我本人是在某一个领域画虎画了上万行代码的时候才慢慢有自己思路的。就像写作文,要有自己思路总是一般来说要经过几个阶段,首先学习词汇,然后学习造句,然后大量阅读别人的...
在每一个孩子的成长道路上,六一儿童节都是一段值得纪念的日子。不仅因为这是他们专属的节日,更因为在这个日子里,很多孩子会因为自己的努力而获得认可与奖励。然而,当我们阅读一篇题为《六一节获奖感言》的文档时...
作为初学者,正确地入门至关重要,避免走弯路和浪费时间。本文将提供一条有效的学习路径,帮助你顺利入门。 首先,不要急于求成。直接学习VC++可能会遇到困难,因为它涉及的知识面广泛,包括C++语言本身和Windows ...
有了这些说明,学习者便可以避免在初学阶段走弯路,提高学习效率。 总而言之,易语言速成教程、易语言源码以及软件打包下载系统,这三者相结合,为易语言的学习者提供了全面的学习资源和实践平台。学习者不仅可以...
通过大量的真题练习,考生可以有效提高解题速度和准确率,同时,答案部分的详细解析能够帮助考生更好地掌握知识点,避免在复习中走弯路。 值得指出的是,这些真题不仅反映了软件设计行业的发展和技术变革,而且还能...
在接下来的一段日子里,我将会结合电子工程师之家举办的主题周活动 写一点自己的想法。尽可能从实用的角度去讲述。希望能够帮助更多的初学者更上一层楼。而关于这个主 题周的最大主题我想了这样的一个名字“从单片机...
通过分享过来人的经验和实际案例,这本书帮助学生认清方向,少走弯路,更有效地达成职业目标。对于正处于学习和职业探索阶段的计算机专业学生来说,这本《IT学生解惑真经》无疑是值得推荐的一本好书。
这包括创客沙龙、项目路演辅导、商业计划书指导等,旨在全方位提升创业者的创业技能,帮助他们在实际的创业过程中少走弯路,提高成功率。 综合来看,城口县第三届创新创业大赛是一个典型的政府引导、社会参与和服务...
《健美冠军指导书_训练营养备赛与参赛_1.doc》应运而生,旨在为初学者和健美爱好者提供一份全面的训练和营养指南,让他们在健美之路上少走弯路,更快达到目标。 首先,训练作为健美的基石,其重要性不言而喻。训练...
我们应该感谢老师的批评,因为它促使我们自我反思,避免走弯路。对于学习有困难的同学,老师的额外辅导更是无价的礼物。我们要通过努力学习,提高成绩,来表达对老师的感恩之情。 此外,感恩也是对身边所有人和事的...
通过借鉴他人的经验,读者可以少走弯路,提升自己的养鸟技艺。书中内容不仅限于芙蓉鸟,还涉及与芙蓉鸟饲养管理相似的其他鸟类,如牡丹鹦鹉、娇凤、十姐妹鸟、珍珠鸟和灰文鸟等,这无疑拓宽了读者的知识面,有助于...
2. **长沙湾道时装街**:深水埗区的长沙湾道时装街也是一个知名的批发中心,尤其是黄竹街至钦州街一段。这里不仅吸引本地批发商,还吸引了不少国内外游客,成为了一个具有本土特色的购物热点。 3. **恒福商业大厦**...
"真正快乐的人是那种走弯路时也不忘享受风景的人",这提醒我们即使面对困难,也要保持乐观的心态,欣赏生活中的美好。"把脾气拿出来,叫本能;把脾气压回去,叫本事",这教导我们在处理人际关系时要控制情绪,展现出...
历史证明,贤臣的忠言能够帮助君主认清形势,修正错误,避免走弯路。魏征“以人为镜”的理念,至今仍然有着深刻的启示意义,它告诉我们在任何时代,坦诚沟通和直言进谏都是值得提倡的美德。 《谏太宗十思疏》是一篇...
这些资料相辅相成,帮助工程师在设计初期就掌握正确的方法和技巧,避免走弯路,从而提高开发效率,缩短产品上市时间。无论对于刚刚接触SC2363的初学者,还是对此类微控制器有深厚基础的专业人士,该资源包都是一份...