栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java编译器如何在继承中选择正确的方法和变量

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java编译器如何在继承中选择正确的方法和变量

所有方法签名和变量都在编译时进行验证,但实际的方法调用在运行时完成/解析。

例如 :

class A {int i=5;public void doSomething(){//print "in A"}}class B extends A{int i=10;    public void doSomething(){// print "in B"}public static void main(String[] args){A a = new B();a.doSomething();}}

现在,当您调用时

a.doSomething();
,在编译过程中,编译器仅检查是否
doSomething()
为类A定义了(lhs参考)。甚至不必担心是否也为类B定义了该方法。即使该方法不存在
B
,该程序也可以正常编译。

接下来,在运行时,JVM根据对象的类型(

B
根据您的情况)动态决定要调用的方法。

因此,

"in B"
被打印。

现在,回到领域。在编译期间将解决对字段的访问。因此,如果在编译期间不存在任何字段,则编译将失败。这些字段根据引用类型进行调用。因此,

a.i
将打印
5
A's
i
),因为该字段在编译时已解决。因此,不同之处在于,方法调用在运行时解析,在编译时需要/检查其签名,而在编译时则检查/解析字段。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/506503.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号