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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java中多态的方法调用
1.什么是多态        允许不同类的对象对同一消息做不同的响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)。多态使用了一种动态绑定(dynamic binding)技术,指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。多态的使用消除了类型之间的耦合关系。 2.多态实现的方式         接口实现,继承父类进行方法重
判断对错。在java的多态调用中,new的是哪一个类就是调用的哪个类的方法。
链接:https://www.nowcoder.com/test/question/done?tid=6726315&qid=14992#summary 来源:牛客网 java多态有两种情况:重载和覆写 在覆写中,运用的是动态单分配,是根据new的类型确定对象,从而确定调用的方法; 在重载中,运用的是静态多分派,即根据静态类型确定对象,因此不是根据new的类型确定调用的方法
java之多态调用成员变量,成员函数,静态函数的特点
子类和父类之间存在多态时,我们来探讨一下编译和运行时候调用的特点: 先上代码: class Fu { int num = 3; void show() { System.out.println("fu show"); } static void method() { System.out.println("fu static method"); } } class Zi
(多态)Java向上转型之后调用子类的同名变量/方法的问题
class Father{ public void f(){ System.out.println("A"); } } class Son extends Father{ public void f(){ System.out.println("B"); } public void g(){ System.o
java中多态父类的成员变量和方法调用问题
class Super { String name = “父类名字”; public void setName(String name) { System.out.println(this.getClass()); this.name = name;//赋值给父类的name,name 为字段指向当前类的字段 } public
java多态向上、向下转型问题
向上转型  假定父类为动物,子类为狗,父类有一个方法发声(),狗继承并覆盖了一个发声方法。           在子类重写该方法  则:动物 a=new 狗();//这就为向上转型a.发声();  在调用 a.发声();时调用的是狗的发声()也可调动物类其他方法 但不能调用狗类方法  向上转型都会成功,是安全的。 就像说狗是动物没问题。 向下转型  若修改为动物 a=new 狗()
Java多态中重载方法参数分别为父类和子类时的疑惑
问题: 代码如下: class A { public String show(D obj){ return ("A and D"); } public String show(A obj){ return ("A and A"); } } class B extends A{
关于java的多态方法调用顺序的问题
使用父类类型的引用指向子类的对象,该引用调用的师父类中定义的方法和变量,变量不能被重写(覆盖);如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;          注意特殊情况,如果该父类引用所调用的方法参数列表未定义,就调用该父类的父类中查找,如果还没找到就强制向上类型转换参数列表中的参数类型,具体优先级高到低依次如下: this.show(O)、sup
java多态的实现原理
多态性是Java面向对象的一个重要机制,本文将向您详细介绍Java语言中多态性的实现原理和方法,通过多态一点带出更多Java面向对象有趣而实用的知识。 AD: 多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性。在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度;今天我们再次深入
多态的执行究竟是父类的还是子类的?
首先Java实现多态有三个必要条件:继承、重写、向上转型。          继承:在多态中必须存在有继承关系的子类和父类。          重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。          向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。 然后就是多态中的执行问题了,我们可以用一句话来