1、所有的覆写方法,必须加@Override注解
解释:所有的覆写方法,必须加@Override注解。 反例:getObject()与get0bject()的问题。一个是字母的O,一个是数字的0,加@Override可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。
加上注解能增加代码的可读性,看到标签就知道这是从父类重写的方法,在调用时也将调用重写后的方法。并且使用@Override可以准确判断是否覆盖成功。
注意:
- 子类的访问级别必须高于父类被覆盖方法的访问级别,例如父类是public的而子类是protected的则是错误的。
- 方法被定义为private、static、final则不能被覆盖
- 方法调用时,会先在子类寻找覆盖的方法,再到父类寻找
2、Map/Set的key为自定义对象时,必须重写hashCode和equals
解释:HashMap中,hashCode()方法继承与Object类,hashCode码默认是内存地址。即便有相同含义的两个对象,比较也是不相等的。例如:
Student st1 = new Student("wei","man");
Student st2 = new Student("wei","man");
HashCode
HashCode是通过hash函数得来的,指的是在hash表中有对应的位置。
能够大大提高查询效率