大家好,今天小编关注到一个比较有意思的话题,就是关于java语言怎么设置赋值的问题,于是小编就整理了2个相关介绍Java语言怎么设置赋值的解答,让我们一起看看吧。
J***a什么时候将对象赋值null?
int 0;
long 0L;
class Person{
String name; // 名字,默认为null 在使用时赋值
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语言怎么设置赋值的2点解答对大家有用。