使用哪种重载的问题
2015-08-24 17:05
239 查看
public class ExamTest { public void myMethod(Object o) { System.out.println("my object"); } public void myMethod(String str) { System.out.println("my string"); } @Test public void test1() { this.myMethod(null); } }
打印结果是?myMethod()方法有重载,那么到底是调用哪个方法呢?
经实测,打印的结果是my string。这是因为null从子类开始匹配,String类是Object类的子类,所以匹配的是参数类型是String类型的方法。假如本类中没有参数类型是String类型的方法,则会直接匹配myMethod(Object o)方法。
public class ExamTest { public void myMethod(Object o) { System.out.println("my object"); } @Test public void test1() { this.myMethod(null); } }会打印出my object。
又假如有多个参数类型是Object类的子类的类型的方法,则编译器不知道要匹配哪个方法,会报编译错误。如下
public class ExamTest { public void myMethod(Object o) { System.out.println("my object"); } public void myMethod(String str) { System.out.println("my string"); } public void myMethod(Date date) { System.out.println("my date"); } @Test public void test1() { this.myMethod(null); } }
为了证明上面的结论,又写了下面代码:
public class ExamTest { public void myMethod(Object o) { System.out.println("my object"); } public void myMethod(TestClass testClass) { System.out.println("my testClass"); } public void myMethod(TestClass2 testClass) { System.out.println("my testClass2"); } @Test public void test1() { this.myMethod(null); } } class TestClass { } class TestClass2 extends TestClass { }
上面代码中,继承关系是TestClass2继承TestClass,而TestClass又继承Object。所以将会调用myMethod(TestClass2 TestClass)方法,打印出来的是my testClass2。
相关文章推荐
- 哈希冲突
- 程序员的三年创业之路
- 一种让超大banner图片不拉伸、全屏宽、居中显示的方法
- Java(Android)线程池[转]
- iOS:(接口适配器3)--iPhone适应不同型号 6/6plus 前
- Ant的使用方法
- Introduction to Java Programming编程题7.6<两个矩阵相乘>
- POJ1979 DFS
- Opencv用鼠标绘制椭圆
- Uvalive6439(Pasti Pas!)
- MongoDB count distinct group by JavaAPI查询
- bzoj4004[JLOI2015]装备购买
- MYSQL的常用命令和增删改查语句和数据类型
- interrupt的问题
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 与Tomcat 实现动静态分离、负载均衡
- swt中setToolTipText()失效问题和setToolTipText()部分测试
- Android 打造形形色色的进度条 实现可以如此简单
- CSU_1508_地图的四着色
- Android百度地图SDK:隐藏比例尺,隐藏百度LOGO,隐藏缩放控件