大家好,今天小编关注到一个比较有意思的话题,就是关于java语言多态性的问题,于是小编就整理了4个相关介绍Java语言多态性的解答,让我们一起看看吧。
- 在java中,什么是多态?多态是用来做什么的?
- JAVA中的多态与重载有什么区别?
- Java接口在不为实现多态的情况下,声明接口除了便于阅读还有什么用呢?
- Java中的多态,为什么子类实例能够赋值给父类引用,反之则不行?
在JAVA中,什么是多态?多态是用来做什么的?
多态属于j***a面对对象编程的一个特性,他能允许不同类的对象对同一消息(或者函数)做出响应。更直白的讲就是同一消息可以根据发送对象的不同而***用多种不同的行为方式。
举例:比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个***发生在不同的对象上会产生不同的结果。
多态的作用是用来消除类型之间的耦合关系。增加程序的可扩展性。比如编程中,只管按照父类的设计进行操作,不管具体是什么样的子类,将来这个子类用着不舒服了,换一个就行,不影响原来的代码,这样代码维护起来就更加容易
J***A中的多态与重载有什么区别?
两者区别如下:
多态是建立在重写的基础之上的,是类与类之间的关系,是发生在不同的类之间的,子类重写父类的方法。实现不同的子类,不同的实现形态。
多态有3个条件
1:继承
2:重写(重写父类继承的方法)
而重载是类的内部的方法构型上的不同,是发生在同一个类里面的。同一个函数名称,参数不同的多个方法,实现同一类型的功能。
J***a接口在不为实现多态的情况下,声明接口除了便于阅读还有什么用呢?
J***a接口在不为实现多态的情况下,声明接口除了便于阅读,还有实现多重继承。在J***a编程中,接口是它的独门绝技,这也是有别于基它的语言。同时也区别自身类,而自己的类只能单独继承,而J***a接口可以多重。举个简单例子说明一下。
当然这只是一个简单的多重态例子,如有什么问题,请关注我,同时这个J***a例子,能帮到大家!谢谢!
J***a中的多态,为什么子类实例能够赋值给父类引用,反之则不行?
这个涉及到J***a多态实现的原理。(这里默认你有一点研究)
首先给出定义:
多态指的是父类引用可以指向子类对象,同一个引用在调用同一个方法时表现出不同的行为特征。多态的实现分为两个阶段:编译时和运行时;预备知识:在JVM加载类的同时,会在方法区中为这个类存放很多信息(详见《J***a 机体系结构 》)。其中就有一个数据结构叫方法表。它以数组的形式记录了当前类及其所有超类的可见方法字节码在内存中的直接地址 。这个方法表中包含所有的 除开私有方法、 final方法 、构造方法和静态方法之外的所有方法,而且数组元素排列特性是:首先是Object方法,再是自己的间接父类的方法表,再是自己直接父类的方法表,最后是自己这个类的方法表。
在编译时,jvm根据引用类型去找自己的类中的方法表中是否含有方法的引用,jvm会先去father类中找是否能匹配到“合适”的方法,如果能则编译通过,如果没有则编译报错。(这也就是为什么学J***a语法时,父类引用只能调用父类存在的方法而不能调用仅在子类中存在的方法)
在编译不报错的情况下,来到运行时,在运行时,jvm保证了该父类引用指向正确的对象
根据对象(father)的声明类型(Father)还不能够确定调用方法f1的位置,必须根据father在堆中实际创建的对象类型Son来确定f1方法所在的位置。这种在程序运行过程中,通过动态创建的对象的方法表来定位方法的方式,我们叫做 动态绑定机制 。这种动态绑定机制就实现了多态。
由上面的实现过程可以知道,j***a的多态只能父类引用指向子类对象。
如果要问为什么不设计让j***a的子类引用指向父类对象,这就涉及到语言设计了,已经不是j***a多态实现这个范畴,J***a之父--詹姆斯·高斯林对这个问题可能最有发言权。
到此,以上就是小编对于j***a语言多态性的问题就介绍到这了,希望介绍关于j***a语言多态性的4点解答对大家有用。