返回信息流public class TestStatic1 extends TestStatic {
public static void string(String str){
System.out.println("string");
}
public static void string(Object str){
System.out.println("object");
}
public static void main(String [] args){
Object obj = new Object();
TestStatic1.string(null);
}
}
为啥输出的是string,null不是不确定类型吗?
这是一条镜像帖。来源:北邮人论坛 / java / #34907同步于 2014/9/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
请教一个java笔试题
panchao
2014/9/24镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
这是重载优先级的问题,当一个方法被重载时,在调用这个方法的时候编译期间就已经确定了它会执行哪个方法,是依次向上转型,因为String类默认继承Object,所以调用string(String str),输出String,如果是两个毫无关系的类T1和T2,.Teststatic1.string(null);这行代码会报错。
【 在 superzhaoyy 的大作中提到: 】
: 这是重载优先级的问题,当一个方法被重载时,在调用这个方法的时候编译期间就已经确定了它会执行哪个方法,是依次向上转型,因为String类默认继承Object,所以调用string(String str),输出String,如果是两个毫无关系的类T1和T2,.Teststatic1.string(null);这行代码会报错。
多谢
这个我觉得就是重载的时候的形参有继承关系的,就是要采用“最大限度匹配原则”即sf说的向上转型遇到的第一个就是String类型的 所以与String类型匹配,调用输出String。当有多重继承关系的时候就是寻找引用最直接关系的父类那个引用执行.(但是null不是任何类型所以感觉还是不对)
t1和t2如果是毫无相关的类,string (null)会调用哪个方法呢?问题是null可以被所有引用类赋值,t1,t2都不算他的父类吧,也没有优先级呀
【 在 dqh 的大作中提到: 】
: 这个我觉得就是重载的时候的形参有继承关系的,就是要采用“最大限度匹配原则”即sf说的向上转型遇到的第一个就是String类型的 所以与String类型匹配,调用输出String。当有多重继承关系的时候就是寻找引用最直接关系的父类那个引用执行.(但是null不是任何类型所以感觉还是不对)
来自「北邮人论坛手机版」
既然null可以匹配任何引用类型,如果t1t2不相关,那么他俩谁的优先级高呢?我觉得可能会报类型模糊的错误吧。未在电脑上试验。
【 在 iwantyouby 的大作中提到: 】
: 顶楼上大牛 sf的说法确实有问题 ps:null可以匹配任何引用类型
来自「北邮人论坛手机版」