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);
//还有其他情况,我这里就不依次列举了
}
}


0

5个回答

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

0

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

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

0

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

0

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

0

输出顺序: String String object

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

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java中多态父类的成员变量和方法调用问题
class Super { String name = “父类名字”; public void setName(String name) { System.out.println(this.getClass()); this.name = name;//赋值给父类的name,name 为字段指向当前类的字段 } public
判断对错。在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中多态的方法调用顺序问题
这个标题起的有点大,我想说的重点并不是整个的顺序this.method(o)>super.method(o)>this.method((super)o)>super.method((super)o)这个顺序以及多态的详解可以参看一个经典实例理解java的三大特性之多态我在拜读这篇文章的时候很是赞赏,但是后来自己实践时发现了一些不一样的地方,于是在这里拉出来讨论。我在写方法时使用了toString方法
java java面向对象-多态时方法的调用问题
20180315 java java面向对象-多态时方法的调用问题在多态时方法调用问题的前提是 必须存在多态情况,即子类对象赋给父类变量。存在父类:SuperClass 子类 SubClass 方法:doWork//父类class SuperClass{}//子类class SubClass extends SuperClass{}class MethodCallDemo{  public sta...
Java多态调用机制理解
首先上难以理解的结论: * 成员方法(非静态)(运行看子类, 编译看父类): * 编译时, 如果父类没有, 则编译失败. * 运行时, 多态调用的方法用的是子类的方法, 如果子类没有则找父类的. * 成员变量(运行编译看父类): * 编译时, 如果父类没有, 则编译失败. * 运行时, 多态调用的成员变量用的是父类的.再上演示代码: 父类 publ
java多态向上、向下转型问题
向上转型  假定父类为动物,子类为狗,父类有一个方法发声(),狗继承并覆盖了一个发声方法。           在子类重写该方法  则:动物 a=new 狗();//这就为向上转型a.发声();  在调用 a.发声();时调用的是狗的发声()也可调动物类其他方法 但不能调用狗类方法  向上转型都会成功,是安全的。 就像说狗是动物没问题。 向下转型  若修改为动物 a=new 狗()
多态中,方法的调用优先级
以前对java中多态的理解只停留在重写Overriding和重载Overloading上,但是对于经过重写,重载的方法的调用顺序,尤其涉及父类对象以子类实例化,又或者经过向上向下转型后,经过重写的方法调用的优先级往往会使人混乱。。例如:         class A {             public String show(final A obj) {
关于java的多态方法调用顺序的问题
使用父类类型的引用指向子类的对象,该引用调用的师父类中定义的方法和变量,变量不能被重写(覆盖);如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;          注意特殊情况,如果该父类引用所调用的方法参数列表未定义,就调用该父类的父类中查找,如果还没找到就强制向上类型转换参数列表中的参数类型,具体优先级高到低依次如下: this.show(O)、sup
java多态中向上转化类型不能调用子类的变量
java多态中向上转化类型之后,虽然说可以调用子类和父类的方法,但是不能调用子类中的变量。会显示没有变量。 代码截图如下,便于理解: 错误提示为:
(多态)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中的多态问题,即父类中引用子类的对象
java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”。         我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类。我可以通过   Cat c = new Cat(); 实例化一个Cat的对象,这个不难理解。         但当我这样定义时:   Animal a = new Cat();   表示定义了一个Animal类型的...
java多态使用时,如果想要调用子类特有属性如何做.
这个问题其实很简单,但是今天有人突然一说竟然不知道该怎么做了,我记得是使用instance of,但有同事说这是判断是否是父类的,其实也可以判断是否是他的子类. 为了验证是否正确,我写了一个demo验证一下.1. Animalpublic interface Animal { public void eat(); public void run(); }2. Dogpublic
java多态父类引用指向子类对象的问题
java 父类引用指向子类对象时,成员变量的编译和运行都是看左边,而方法编译看左边,运行看右边。  class ParaentClass{ public int i = 10; public void test(){ System.out.println("father"); } } public class SubClass extends ParaentClass{ publi...
Java多态之向上转型、同名变量以及方法覆盖
Java向上转型时多态的体现,父类与子类有同名变量是内存的分配,向上转型时方法的覆盖
JAVA面试题---多态成员变量的特点
在多态中,成员变量的特点:无论编译和运行,都参考左边(引用型变量所属的类)。 在多态中,静态成员函数的特点:无论编译和运行,都参考左边。class Fu { int num = 4; void show() { System.out.println(""show Fu); } }class Zi extends Fu { itn num =
Java 构造方法中的多态
类的实例化顺序是先实例化父类在实例化子类,也就是先调用父类的构造方法,再调用子类的构造方法,如果在构造方法中调用其他多态方法,可能导致不正确的结果。 下面的例子,在父类中调用study()方法的时候,会有点问题 class Person { public void study() { System.out.println("I am studing!"); }
Java中类的属性不体现多态性
http://blog.csdn.net/l_b_h_w/article/details/52665231 多态出现的缘由:java的引用变量有两种类型:一个是编译时的类型,一个是运行时类型。                                编译时类项:声明该变量时使用的类型决定。                                运行时
(JAVA基础)什么是多态?为什么要使用多态?
多态是为了是程序具有更好的扩展性,并可以对类进行通用的处理!那么这个是怎样体现的呢? 我们先看一段程序: package stduy; abstract class Animal{ abstract void eat(); } class Dog extends Animal{ public void eat() { System.out.println("啃骨头!"); }...
java多态实现的JVM调用过程
多态同一个类的不同表现形态,不同的形态是通过其不同的子类体现 java通过将子类对象引用赋值给超类对象变量, 来实现动态方法调用。面向对象的三个特征与含义下面看例子:public class A{ public String name = "父类name"; public void move(){ System.out...
多态的执行究竟是父类的还是子类的?
首先Java实现多态有三个必要条件:继承、重写、向上转型。          继承:在多态中必须存在有继承关系的子类和父类。          重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。          向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。 然后就是多态中的执行问题了,我们可以用一句话来
java多态的实现原理
多态性是Java面向对象的一个重要机制,本文将向您详细介绍Java语言中多态性的实现原理和方法,通过多态一点带出更多Java面向对象有趣而实用的知识。 AD: 多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性。在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度;今天我们再次深入
一个关于成员变量的多态问题
首先看下面的代码:class Fu{ int i = 10; } class Zi extends Fu{ int i = 20; } class Test{ public static void main(String[] args) { Fu test = new Zi(); System.out.println(Fu.i);
【超经典】Java多态有什么好处?怎样用?
多态可以分为变量的多态,方法的多态,类的多态.我这里强调的是类的多态,这是在以后的工作中经常会用到的。多态的表现形式有方法重载,方法改写,多态变量和泛型。重载是一种静态的多态性,在程序编译时确定被调用的方法,称为早绑定。而多态变量和改写相结合之后,方法的调用在运行时才能确定,是动态的多态性,称为晚绑定。 首先,有这样一个系统:有个学生从兰理工毕业了,做得还不错.买了辆捷达汽车.这个系统应
Java多态中的问题(三)构造器中调用多态方法
动态绑定:在运行时根据对象的类型调用恰当的方法。Java中除了static方法(构造方法可看做static方法)和final方法(private方法可看做final方法)之外,其他普通方法都是动态绑定的。 测试在构造方法中调用该类的多态方法,代码如下。 package polymorphism; class ConstructSuper{ protected int rr = 1; C...
java多态总结以及动态绑定机制
什么是多态? 1.继承体现了多态,JAVA里没有多继承,一个类之能有一个父类。而继承的表现就是多态。一个父类可以有多个子类,而在子类里可以重写父类的方法(例如方法print()),这样每个子类里重写的代码不一样,自然表现形式就不一样。这样用父类的变量去引用不同的子类,在调用这个相同的方法print()的时候得到的结果和表现形式就不一样了,这就是多态,相同的消息(也就是调用相同的方法)会有不同的结
java中多态的向上转型
多态是java中核心特性之一,多态的合理应用可以是程序的的可读性更强,使程序看起来不那么臃肿,最重要的是更易维护,扩张性也更强.作为一个小白,今天就分享一下多态在程序中的向上转型很多人认为向上转型就是单纯的用父类来接受子类对象,不置可否确实这是多态的核心应用之一,也就是多态的向上转型,但这句话太笼统,远远不足以深入理解多态,在平时的使用向上转型也会产生许多意想不到的错误public class S...
java多态有什么作用?java多态的作用:消除类型之间的耦合关系,怎么理解?
java多态有什么作用?java多态的作用:消除类型之间的耦合关系,怎么理解?1java多态有什么用,即为什么要用多态?总结:①---使用多态Cat cat=new Cat();cat.eat();Dog dog=new Dog();dog.eat();Pig pig=new Pig();pig.eat();---不使用多态Animal animal=new Cat();animal.eat();...
Java中final和多态调用成员变量、成员方法的应用(基础详解)
final final(关键字) 1.修饰方法 作用: 被修饰的方法 不能被重写 2.修饰变量 final 修饰引用数据类型时 对象中的成员变量值是可以被修改的 被final修饰的对象 的地址 不能改变(不能重新指向) 3.修饰类 作用 :被修饰的类 不能被继承 例如: public static void mai
java中的对于多态的理解
面向对象:      类:具体的对象抽象而来,可以抽象的表示一类具有相同特征和行为的对象      对象:是由类的实例化而来,对象是类的一个实例 java中关于多态的理解 打个比方 父亲person有行为这个方法,里面包括几个动作:吃饭,睡觉,走路 父亲有三个儿子,三个儿子都继承了父亲的行为方法,所以三个儿子都有吃饭,睡觉,走路这些动作,但是三个儿子又分别有自己的动作--大儿子A会
Java三大特性——什么是多态,多态的作用
面向对象编程有三大特性:封装、继承、多态。 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。 继承是为了重用父类代码。两个类若存在IS-A的关系就可以使用继承。,同时继承也为实现多态做了铺垫。那么什么是多态呢?多态的实现机制又是什么?请看我一一为你揭开: 所谓多态就是指程序中 定义的引用变量...
Java多态中的向上转型和向下转型
向上转型:将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换     用法: Father f = new Son(); 向下转型:子类引用指向父类引用的子类对象  通俗的说就是子类实例对象赋值给父类引用,然后父类引用又要赋值给子类引用,这个过程就是向下转型。   语法: Father f = new Son(); Son s = (Son)f; //看语法,要有(类型)  ...
Java多态实战——方法传入对象中当参数
大家都知道java中三大重要的面向对象编程特点——封装、继承、多态。 今天我来讲讲多态: 首先,直接上代码 Shape 类: public class Shape { String name; public Shape(){}//最好都写一个空的构造器 public Shape(String name) { this.name = name; } public...
java分享 一、论证重载是不是多态
最近看了一些书上讲的多态,发现相互之间是有冲突的,最主要的冲突是对重载是不是多态的观点,看过这些书以后,我有了自己的看法,特此写出来给大家分享:     一、首先我们看一下多态的定义:多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法或者属性调用在编程时不确定,而在运行期间才确定。     从定义来看,需要注意几点:         1)引用变量指向的具体类型在编程时不确
多态的成员变量调用
1. 多态的成员变量调用的时候只关心引用型变量所属的类中是否有被调用的成员变量;有,则编译通过;否则,编译失败. 通俗的讲:也就是看定义变量的时候等号左边的变量类型所属的类中是否有这个成员. 如:下面这个例子输出的就是5. 2.以上说的是成员变量,如果是调用成员函数要看的是等号右边即看是由谁创造的 public class Polymophic { public static voi
java多态性的经典例子
下面是java多态性的一个经典例子,对于搞懂java多态性有很大帮助 public class Polymorphism { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); //创建B对象,转化成A对象,拥有的成员函数是showD(),和覆盖掉show(A){A
java多态
java多态
Java多态之父类型引用指向子类对象透彻理解
视频地址: Java多态之父类型引用指向子类对象透彻理解 更多精彩内容,敬请扫码关注(HelloWorld小码农):  
为什么C++里调用虚函数比调用普通函数慢?
为什么C++里调用虚函数比调用普通函数慢? 原因: - 运行时需要得到对应类的函数的地址 - 当在用父类的引用或者指针调用虚函数时,会先从该对象的头部取到虚函数的地址(C++标准规定虚函数表地址必须放最前),再从虚函数表中取到实际要调用的函数的地址,最终调用该函数 - 调用虚函数,相比普通函数,实际上多了三条指令:取虚表,取函数地址,call调用。 - 影响cpu流水线 ...
理解java多态的概念和作用
<br />多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。<br />编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。 <br />对不同类的对象发出相同的消息将会有不同的行为。比如,你的老板让所有员工在九点钟开始工作, 他只要在九点钟的时候说:“开始工作”即可,而不需要对销售人员说:“开始销售工作”,对技术人员说:“开始技术工作”, 因为“员工”是一个抽
文章热词 编程语言学哪个好 线性回归目标函数推导 支持向量机对偶目标函数 立体匹配OpenCV相关函数 函数逼近方法讲解
相关热词 c++rand函数为什么无法识别 c++.length在哪个函数 c++fill函数为什么不能用 python到底怎么学 为什么学python