方法重写一定要注意的
来源:互联网 发布:linux如何修改只读文件 编辑:程序博客网 时间:2024/04/30 17:29
首先声明下,程序的例子是用的面试宝典上,但是解析的内容是原创的。
重写的函数必须有相同的函数名,一致的参数列表和返回值,访问权限可以不一样,但是不能比被重写的函
数更严格(即被重写的是protected的话,重写的函数只能是public或者protected),最后,还需要注意的
重写方法需要抛出与原方法所抛出异常类型一致的异常或者不抛出异常。
具体示例:
import java.util.ArrayList;
import java.util.List;
public class Test7 {
private String value = null;
public Test7(String v) {
value = v;
}
public boolean equals(Test7 o) {
if (o == this) {
return true;
}
if (o instanceof Test7) {
Test7 test7 = (Test7) o;
return value.equals(test7.value);
}
return false;
}
/*public boolean equals(Object obj) {这样才是改写,参数必须与Object方法中一样是Object类
型才对
return true;
}*/
public static void main(String[] args) {
List list = new ArrayList();
Test7 test1 = new Test7("object");
Test7 test2 = new Test7("object");
Test7 test3 = new Test7("object");
Object test4 = new Test7("object");
list.add(test1);
System.out.println(list.contains(test2));//false
System.out.println(test2.equals(test3)); //true
System.out.println(test3.equals(test4)); //false
System.out.println(test4.equals(test3)); //false
}
}
解析:第一个输出为false,是因为list.add(test1);在list中放入的是test1,也就是“object”内存地址
,而不是“object”本身,所以输出肯定为假;也就是list中contains方法判断的依据是地址;
第二个输出true,是因为test2调用的是Test7的equals方法,符合第二个if条件,最后比较是String
的equals方法,String重写了equals方法自然比较的是值,所以输出为true;
第三个输出为false,是因为test3调用的是Object的equals方法,可能很多人会奇怪为什么不是Test7
的,因为test3.equals(test4),其中test4是Object类型,而这个Test7中的是Test7类型,所以肯定优先匹
配的是父类Object中equals方法,因为Object中的equals方法的参数是Object类型的,所以调用了Object中
equals方法,自然比较的是地址,那么输出也肯定为false了;
第四个输出为false,是因为test4调用的也是Object的equals方法,可能又有很多人会奇怪:这不是
多态吗,为什么不是Test7的equals方法,因为这个equals方法根本不是重写,重写必须要有一致的参数列表
,这里的equals的参数类型是Test7,而Object中的Object类型,所以不是重写,那么自然没有多态存在,调
用的就是Object的equals方法,比较的是地址,所以输出为false了。
- 方法重写一定要注意的
- Handler 的方法重写注意
- 重写父类的方法一定要加@Override
- 重写toString方法需要注意的
- java 重写equals方法注意的地方
- 重写方法时需要注意的问题
- 方法重写要注意的事项
- 一定要注意的事情
- 在action中定义的方法一定要注意的事项
- 为什么重写equals方法,一定要重写HashCode方法?
- 重写equals方法时一定要重写hashcode方法
- 为什么重写equals方法,一定要重写HashCode方法?
- 为什么重写equals方法,一定要重写HashCode方法?(
- 0073 为什么重写equals方法,一定要重写HashCode方法【基础】
- 为什么重写equals方法,一定要重写HashCode方法?
- 为什么重写equals方法,一定要重写HashCode方法?
- 为什么重写equals方法,一定要重写HashCode方法
- 重写equals方法为什么一定要重写hashcode方法
- HTML CSS + DIV实现整体布局
- 【JAVA】使用 iText XMLWorker实现HTML转PDF
- Android系统介绍
- 关于stdClass
- Android与IOS的后台与推送对比
- 方法重写一定要注意的
- Linux系统上nginx+tomcat分布式的安装与配置
- EXC2618N LED矩阵驱动程序
- 测试中需要用到的一些小工具
- php学习随记3
- 使用maven管理你的项目
- linux 下C语言学习路线
- !CodeForces 543A Writing Code --DP--(三维dp,滚动数组)
- 系统特点