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

这里是考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个回答

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

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

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

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

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

输出顺序: String String object

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java多态为什么
public class Test rn public static void main(String[] args) rn Test t = new Test();rn System.out.println(t.doit(1,2));rn rn rn public String doit(int a,int b)rn return "a";rn rn rn public String doit(int ...is )rn return "b";rn rn
该调用哪个函数??
[code=C/C++]rnrn#include rnusing namespace std;rnrnclass Arnrn int i;rnpublic:rn A(int b=0):i(b)cout<<"构造"<
线程调用主线程类的函数,到底属于哪个线程
我在线程1中要用到主线程类的函数,我先创建一个他的对象rn在调用..这样该函数是在线程1的时间片运行还是主线程中运行的? 我知道用消息的话可以让他在主线程中运行rn可是用对象调用的呢?
JAVA多态(选择最合适的函数)
JAVA多态大家已经非常熟悉了,多态机制使得在调用函数时,自动选择实际类型中的覆盖(override)函数。 看如下代码: package Test; public class Test { public static void main(String []args) { A test = new D(); test.locate(); } } class A { publi
Java多态调用机制理解
首先上难以理解的结论: * 成员方法(非静态)(运行看子类, 编译看父类): * 编译时, 如果父类没有, 则编译失败. * 运行时, 多态调用的方法用的是子类的方法, 如果子类没有则找父类的. * 成员变量(运行编译看父类): * 编译时, 如果父类没有, 则编译失败. * 运行时, 多态调用的成员变量用的是父类的.再上演示代码: 父类 publ
js+ajax,为什么无效!到底哪个步骤错了
function getguid判断用户登录则返回1,没有登录返回0。如果获得1,则执行另外3个函数,但是实际情况,在返回1的时候,另外3个函数并没有执行,试了很多种办法,就没有找出原因在哪里?求助!!rnrn```rnfunction checkauthor()rnrn var topic_id=topicid;rn$.ajax(rn url: "url",rn cache: false,rn data:rn 'topic_id':topic_idrn ,rn type : 'POST',rn success:function(result)rn rn console.log(result);rn if(result!=1)rn rn $('#author').html(result);rn rn rn ); rnrnfunction getlikes()rnrn var topic_id=topicid;rn$.ajax(rn url: "url",rn data:rn 'topic_id':topic_idrn ,rn type : 'POST',rn cache: false,rn success:function(data)rn rn console.log(data);rn rn $('#likes').html(data);rn rn ); rnrnrnfunction getguid()rnrn$.ajax(rn url: "url",rn type : 'POST',rn success:function(data)rn rn if(data==1)rn window.g_uid=data;rn getlikes();rn checkLogin();rn checkauthor();rn rn rn ); rnrngetguid();rnrn//登录后评论rnfunction afterlogin()rnrn var topic_id=topicid;rn$.ajax(rn url: "url",rn cache: false,rn data:rn 'topic_id':topic_idrn ,rn type : 'POST',rn success:function(result)rn rn console.log(result);rn if(result!=1)rn rn $('#after_login').html(result);rn rn rn ); rnrn```
C#多态 与 java多态到底相同么?
下面是csdn java板块的一个热帖:rn写出以下代码的输出结果 rn rn class A rn public String f(D obj)return ("A and D"); rn public String f(A obj)return ("A and A"); rn rn class B extends A rn public String f(B obj)return ("B and B"); rn public String f(A obj)return ("B and A"); rn rn class C extends B rn class D extends B rn rn class test rn A a1 = new A(); rn A a2 = new B(); rn B b = new B(); rn C c = new C(); rn D d = new D(); rn System.out.println(a1.f(b)); A and A rn System.out.println(a1.f(c)); A and A rn System.out.println(a1.f(d)); A and D rn System.out.println(a2.f(b)); B and A rn System.out.println(a2.f(c)); B and A rn System.out.println(a2.f(d)); A and D rn System.out.println(b.f(b)); B and B rn System.out.println(b.f(c)); B and B rn System.out.println(b.f(d)); A and D rn rnrn我把这个例子改写成了C#的 代码如下:rnclass testrn rn rnrnrn rn static void Main(string[] args)rn rn A a1 = new A();rn A a2 = new B();rn B b = new B();rn C c = new C();rn D d = new D(); rn Console.WriteLine(a1.f(b)); // A and A rn Console.WriteLine(a1.f(c)); // A and A rn Console.WriteLine(a1.f(d)); // A and D rn Console.WriteLine(a2.f(b)); // A and A rn Console.WriteLine(a2.f(c)); // A and Arn Console.WriteLine(a2.f(d)); // A and D rn Console.WriteLine(b.f(b)); // B and B rn Console.WriteLine(b.f(c)); // B and B rn Console.WriteLine(b.f(d)); // B and Brn rn rn rn rnrn class Arn rn public String f(D obj) return ("A and D"); rn public String f(A obj) return ("A and A"); rn rn class B : Arn rn public String f(B obj) return ("B and B"); rn public String f(A obj) return ("B and A"); rn rn class C : B rn class D : B rnrn屏幕输出语句后面的是输出结果,发现java和C#版的输入结果不完全相同,想知道原因?谢谢赐教
对话框最大化调用的哪个函数?
如题~~
MTK 录音调用哪个函数
最近做某一项目要用到MTK录音,目前不知调用哪个函数?rn请高手们指明下
Java多态
1.多态定义:一种事物的多种状态 多态的规则(前提): 1.类和类之间要有(继承)关系 2.要有方法的重写 3. (核心)父类的引用(指针) 指向  子类对象(空间)例子:需求: 创建 动物类 猫类 狗类 都有一个吃的方法 动物类 动物吃饭 猫   猫吃鱼 狗   狗吃骨头public static void main(String[] args) { //本类的引用(指针) 指向本类...
java多态
1.什么是多态? 比如空格键,运行音乐播放器,打字的空格,qq发消息的空格,同一个事件发生在不同对象上会产生不同的结果。2.多态存在的必要条件?要有继承或者接口实现,要有方法的重写;父类引用指向了子类的对象。3,多态的好处?二.方法的动态绑定:是指在运行期间判断引用类型的实际类型,根据实际类型调用方法。1.person p=new techer();person p=new student():2...
JAVA多态
多态: 多态是:同一个对象体现出来的多种不同形态(身份),将一种行为表现出不同的效果。要想实现多态的效果,首先要有继承关系。 体现: 父类类型引用指向子类的对象 Teacher teahcer = new Teacher(); // 这个老师是一个老师 Person person = new Teacher(); // 这个人是一个老师 改引用(person)只能调用父类中定义的属性或方法...
java多态和继承中,方法的调用
1. class Fun void show()n n System.out.println("Fu");n nnclass Zi extends Fun void show()n n System.out.println("Zi");n nnpublic class Dream n public static void main(String args[])n n Fu f=new Zi();n f.show();n nnf调用show()方法,输出的结果是 “Zi”,因为覆盖了,可是把Fu类的show()方法删除为什么会报错?既然多态了,f指向Zi类,那么不可以去Zi类中找show()方法吗?
java多态调用中关于静态方法
static它是静态修饰符,一般用来修饰类中的成员。被static修饰的成员变量属于类,不属于这个类的某个对象。(也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量)多态是指父类引用指向子类对象,调用方法时会调用子类的实现,而不是父类的实现。多态的存在有三个...
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法