返回信息流public class T {
public static void add(Object a,Object b){
System.out.println(a.toString()+b.toString());
}
public static void add(Integer a,Integer b){
System.out.println(a+b);
}
public static void main(String[] args){
add(5,10);
}
}
为啥是调用第二个add,当把第2个add注释掉的时候,又能调用第一个add,这个重载有什么规定哇,球大神解决
这是一条镜像帖。来源:北邮人论坛 / java / #30351同步于 2014/6/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
java重载~~
modispy
2014/6/5镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
如果传入的实参类型小于方法中声明的形参类型,实参会被提升。这个栗子里,int先被自动装箱成为Integer,恰好有Integer的形参方法,所以调用第二个,注释掉第二个后,Integer又被提升为Object匹配第一个。
是不是这样提升的。比如T1为爷爷类,T2为父类,会不会是逐步提升的呢,先匹配T2,再匹配T1??
【 在 axpq110 的大作中提到: 】
: 如果传入的实参类型小于方法中声明的形参类型,实参会被提升。这个栗子里,int先被自动装箱成为Integer,恰好有Integer的形参方法,所以调用第二个,注释掉第二个后,Integer又被提升为Object匹配第一个。
【 在 axpq110 的大作中提到: 】
: 可能大概也许吧,还是等大神来精确解答吧。
好像是这样一级一级往上匹配的,我试了 就坐等大神给出更为官方的解答了
sf解释的差不多
java的方法重载属于静态分派,依赖的是对象的静态类型。jvm在面对多种重载方法时候,只能做到选择到“更加合适”的版本
想深入了解可以看看JVM分派的相关博客或《深入理解java虚拟机》
【 在 modispy (魔笛) 的大作中提到: 】
: public class T {
: public static void add(Object a,Object b){
: System.out.println(a.toString()+b.toString());
: ...................
【 在 taoch 的大作中提到: 】
: sf解释的差不多
: java的方法重载属于静态分派,依赖的是对象的静态类型。jvm在面对多种重载方法时候,只能做到选择到“更加合适”的版本
: 想深入了解可以看看JVM分派的相关博客或《深入理解java虚拟机》
okok!谢谢啦~