2 czh500 czh500 于 2018.03.13 23:34 提问

java多态,到底调用哪个函数,为什么? 5C

这里是考java的多态,**到底调用了哪个函数,**大家直接看下面的代码!
public class MyTest {
public void hello(Object o) {
System.out.println("Object");
}
public void hello(String str) {
System.out.println("String");
}
public static void main(String[] args) {
MyTest myTest = new MyTest();
/*到底调用哪个函数,为什么?*/
//情况1
myTest.hello(null);
//情况2
myTest.hello("好好学习,天天向上!");
//情况3
myTest.hello(66);
//还有其他情况,我这里就不依次列举了
}
}


5个回答

caozhy
caozhy   Ds   Rxr 2018.03.13 23:44

这个需要用方法重载中准确性的原则来解释

具体不说了,参考这里:http://blog.csdn.net/jackpk/article/details/43453313

u012601507
u012601507   2018.03.14 00:00

多态优先调用子类,子类没法满足再调父类

lingco
lingco   2018.03.14 08:43

参数有继承顺序的,优先调用子类

baiduwuhen
baiduwuhen   2018.03.14 09:09

输出顺序: String String object

这段代码考的是多态,难点在于情况1。当参数值为null时,系统判断是null=String更准确。 并不是说Object错了,因为Object与String同时出现时,Object比String层次更高,调用String更为准确

Ares2016
Ares2016   2018.03.14 10:37

楼上的几个回答都是对的。对于重载方法里的参数处于父子继承关系,应当优先选择精确度比较高的子类。
1、比如Object 和 String,如果传的值为null,则优先调用String参数的重载方法。
2、对于参数值=66的情况,由于66为int类型,它没有找到指定类型的重载方法,会装箱为Integer类型,调用参数类型为Object的重载方法。
总之,构建多个重载方法时,尽量将重载方法参数类型处于精确状态。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!