这篇文章给大家分享的是有关JAVA中如何调用列表接口的删除重载方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
<强>测试类设计
强>
<强>测试类一强>
public class Text { ,public void 删除(int 指数){ System.out.println才能(“调用传参为int的去除方法“); ,} ,public void 删除(Integer 对象){ System.out.println才能(“调用传参为整数的去除方法“); ,} ,public void 删除(Object 对象){ System.out.println才能(“调用传参为对象的删除方法“); ,} }
<>强测试类二
强>
public class Text { , ,public void 删除(Integer 对象){ System.out.println才能(“调用传参为整数的去除方法“); ,} ,public void 删除(Object 对象){ System.out.println才能(“调用传参为对象的删除方法“); ,} }
<>强测试类三强>
public class Text { ,public void 删除(Object 对象){ System.out.println才能(“调用传参为对象的删除方法“); ,} }
<>强结果强>
三个测试类分别传入整数,整数,对象型变量,观察效果。
<强>测试类一强>
- <李>
传入类型为int:调用传参为int的去除方法
李> <李>传入类型为整数:调用传参为整数的去除方法
李> <李>传入类型为对象:调用传参为对象的删除方法
李><强>测试类二强>
- <李>
传入类型为int:调用传参为整数的去除方法
李> <李>传入类型为整数:调用传参为整数的去除方法
李> <李>传入类型为对象:调用传参为对象的删除方法
李><强>测试类三强>
- <李>
传入类型为int:调用传参为对象的删除方法
李> <李>传入类型为整数:调用传参为对象的删除方法
李> <李>传入类型为对象:调用传参为对象的删除方法
李>从输出结果可以看的出,当方法的传参的类层级逐渐变高时,层级较低的传参会进行向上转型适应传参的需要。
<强>原因分析强>
下面我们先反编译各测试类的源码,结果如下
<强>测试类一强>
<代码> invokevirtual # 11//删除方法:(I) V 代码>
<代码> invokevirtual # 15//删除方法:(Ljava/lang/整数;V 代码>
<代码> invokevirtual # 18//删除方法:(Ljava/lang/对象;)V 代码>
<强>测试类二强>
<代码> invokevirtual # 11//删除方法:(Ljava/lang/整数;V 代码>
<代码> invokevirtual # 11//删除方法:(Ljava/lang/整数;V 代码>
<代码> invokevirtual # 17//删除方法:(Ljava/lang/对象;)V 代码>
<强>测试类三强>
<代码> invokevirtual # 10//删除方法:(Ljava/lang/对象;)V 代码>
<代码> invokevirtual # 10//删除方法:(Ljava/lang/对象;)V 代码>
<代码> invokevirtual # 10//删除方法:(Ljava/lang/对象;)V 代码>
可以看的出,反编译代码中都是调用实例方法的命令,所以结果中自动“向上转型,其实是jvm的功劳.jvm通过在编译时确定调用的传参类型,静态分派到具体方法的。
所以在前言中的困惑已经解除了,就是由于jvm中静态分派的实现,调用次序是int→整数→对象。
感谢各位的阅读!关于“JAVA中如何调用列表接口的删除重载方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!