关于Java多态的实例分析

这是网上的一个源码,由于了解不是很多,所以一直困扰着我,希望大家可以帮下我,说出大概的原理,采纳有报酬。谢谢

1--:a1是类A的实例,所以只能调用A类中的show方法,参数b是类B的实例,B又是A的子类,所以只能调用类A中参数是A obj的那个方法,因为b只能转换为父类型A,不能转换为子类型D
2--:道理同上。
3--:道理同上。
由于前三条的变量类型和对象类型相同,不涉及多态,仅仅是重载的问题。
4--:此条代码是难点,这里涉及到了重写和重载的概念,把重写和重载彻底理解了,你就知道为什么输出是B and A了。重写是子类中的方法和父类中的方法同名,同返回类型,同类型参数。
而重载是同一个类中的两个方法(注意是同一个类中),名相同,但是参数类型不同或者数量不同。因为a2引用的是B类的实例,所以要去B类中找重写的show方法,而不是重载的。所以只能调用参数类型是A的那个方法。
5--:道理同第4条。
6--:B类中继承了A类的参数为D类型的show方法,只继承而没有重写。也就是B类中实际有三个方法,所以此条代码调用的是参数为D的方法。
7--:把上面的都理解了。7,8,9条代码就很容易理解了。
7,8,9和1,2,3一样不存在多态,仅仅是重载方法的调用。多态是父类变量引用子类对象才会发生的。变量类型和对象类型相同,只会涉及重载,和重写无关。
你发的这段代码,我在网上找到了一个博文,看了他的解释,开始我觉得很难理解,后来才明白,他的解释是混乱的。正确的原理是重写和重载。只要你把重写和重载的区别理解透彻,这段代码就容易理解了。追问

兄弟,那个A obj之类的是是什么意思啊?

追答

show()的参数

追问

我知道是参数,但是那个A 和 obj分别代表什么啊,我现在就是只知道可以把对象当做参数传进去,那个obj啥意思啊

追答

A是类名,obj是变量名。
A obj和int i做个类比,A就相当于int,obj就相当于i,只不过A是类,int是关键字。

温馨提示:内容为网友见解,仅供参考
无其他回答

谁能用一个鲜明的例子解释下JAVA的多态,重点是能让我们理解重载和覆盖...
多态就是一个对象具有多种状态,就叫多态。就好像你在你父母面前你是作为儿子的身份出现的,但你在学校身份就换成了学生身份。这相当于是重载,就是你在不同的环境中具有不同的状态。同理,比如说你从你父母那里继承了一处房产,这个房子里面本来就是装修好的,但是你觉得这不符合你的风格,或者说你...

java中的多态是为了解决java中的什么问题
1. 可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。2. 可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得...

谁能跟我说几个JAVA多态,在现实生活中应用的例子,不要说代码和概念,就...
有一个比较经典的多态实例:有一个Animal类,它有Cat,和Dog两个子类,在Animal中有个say方法,当Cat调用这个方法的时候输出的是“小猫喵喵喵”,当Dog调用这个方法时,输出的是“小狗汪汪汪”,这就是Java多态的实现。1、定义一种动物,该类型的动物有叫的属性。2、分别定义猫,狗,鸟,都继承于该...

在java中什么叫作多态性
我自己的总结是,多态是将子类对象抽象成父类的引用。我就举一个例子吧:现在又一个表示动物的类Animal,它还有两个子类,一个表示猫的类Cat,一个表示狗的类Dog。Animal animal;Cat cat = new Cat();Dog dog = new Dog();那么,将子类对象抽象成父类引用,就是:animal = cat;或 animal =...

java中的多态的定义是什么啦 什么情况下使用多态啊?多态有什么作用
多态就是让我们制造出自己想要的东西。写一个画图的类DrawA,定义一个画图的方法a()。我想画个正方形,这时候定义一个正方形类DrawSquare extends DrawA,重写a();方法,方法里边去画正方形。我想去画个圆形,这时候定义一个圆形类DrawCircular extends DrawA,重写a();方法,方法里边去画圆形。这就...

在Java中有哪些是多态性的表现,举例说明。
){System.out.print( "I 'm C ");} 用一个A的分别指向两个B、C的对象 A a1=new B();A a2=new C();分别调用excute方法 a1.excute()、a2.excute()是不是会打印出不同的句子呢? 明明都是A类型的引用调用了excute却会打印不同的句子,这就是多态。

JAVA中,为什么要用多态,,怎么用请给个通俗易懂的例子解释下……_百度知...
重载多态:同一个方法名在不同类型不同数量的参数传入需要有不同的表现。这个在构造方法上用的挺多,一般来说类都会有一个无参构造方法,还有不定的几个有参构造方法,这是因为在编程期间需要调用不同的构造方法来产生不同的类。比如无参的就吧所有属性置为默认值,有参的就用参数去初始化属性等 ...

java的多态怎么实现?
1、继承的存在;(继承是多态的基础,没有继承就没有多态)2、子类重写父类的方法。(多态下会调用子类重写后的方法)3、父类引用变量指向子类对象。(涉及子类到父类的类型转换)向上转型 Student person = new Student()将一个父类的引用指向一个子类对象,成为向上转型,自动进行类型转换。此时通过...

java中多态的特点?
实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。多态的作用:消除类型之间的耦合关系。现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 ...

java中什么是多态性?它具有什么优点
Java是面向对象的语言,多态性是面向对象程序设计代码重用的一个最强大机制,动态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制,主要体现在继承和接口实现两方面,详见例子:继承实现多态例如:class A{ met...

相似回答