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   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 Super { String name = “父类名字”; public void setName(String name) { System.out.println(this.getClass()); this.name = name;//赋值给父类的name,name 为字段指向当前类的字段 } public
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的多态方法调用顺序的问题
使用父类类型的引用指向子类的对象,该引用调用的师父类中定义的方法和变量,变量不能被重写(覆盖);如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;          注意特殊情况,如果该父类引用所调用的方法参数列表未定义,就调用该父类的父类中查找,如果还没找到就强制向上类型转换参数列表中的参数类型,具体优先级高到低依次如下: this.show(O)、sup
java多态向上、向下转型问题
向上转型  假定父类为动物,子类为狗,父类有一个方法发声(),狗继承并覆盖了一个发声方法。           在子类重写该方法  则:动物 a=new 狗();//这就为向上转型a.发声();  在调用 a.发声();时调用的是狗的发声()也可调动物类其他方法 但不能调用狗类方法  向上转型都会成功,是安全的。 就像说狗是动物没问题。 向下转型  若修改为动物 a=new 狗()
Java中多态的方法调用顺序问题
这个标题起的有点大,我想说的重点并不是整个的顺序this.method(o)>super.method(o)>this.method((super)o)>super.method((super)o)这个顺序以及多态的详解可以参看一个经典实例理解java的三大特性之多态我在拜读这篇文章的时候很是赞赏,但是后来自己实践时发现了一些不一样的地方,于是在这里拉出来讨论。我在写方法时使用了toString方法
java多态调用中关于静态方法
static它是静态修饰符,一般用来修饰类中的成员。被static修饰的成员变量属于类,不属于这个类的某个对象。(也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量)多态是指父类引用指向子类对象,调用方法时会调用子类的实现,而不是父类的实现。多态的存在有三个...
多态中,方法的调用优先级
以前对java中多态的理解只停留在重写Overriding和重载Overloading上,但是对于经过重写,重载的方法的调用顺序,尤其涉及父类对象以子类实例化,又或者经过向上向下转型后,经过重写的方法调用的优先级往往会使人混乱。。例如:         class A {             public String show(final A obj) {
Java多态之向上转型、同名变量以及方法覆盖
Java向上转型时多态的体现,父类与子类有同名变量是内存的分配,向上转型时方法的覆盖