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

超类引用无法在Java中调用子类方法

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

超类引用无法在Java中调用子类方法

让我们尝试以与编译器相同的方式查看此行:

animal.dogMethod();

首先,它需要弄清楚是什么

animal
意思。很好而且很容易-它是当前方法中的局部变量,因此它不需要花很多时间。

该变量的编译时类型为

Animal
。编译器不在乎在执行时变量的 是什么-它仅使用有关已声明类型的信息。

因此,这就是它用来尝试查找,即type

dogMethod()
上下文中的含义的方式。首先它查找,然后是(的隐式超类)-但这些类都不包含的声明。到那时,编译器不得不放弃一个错误-
它找不到方法。该方法可在该值所引用的对象的 执行时
类型上使用。它只能在编译时使用编译时可用的信息来绑定它。
animal``Animal``Animal``java.lang.Object``Animal``dogMethod

__
animal



执行 时唯一的决定是使用哪种方法的实现-例如,如果您调用了

animal.toString()
并且
Dog
该类具有重写,例如

@Override public String toString() {    return "I'm a dog";}

那么编译器会发现

toString()
,从方法
java.lang.Object
,所以它会知道该方法调用是有效的-但在 执行
Dog
会因为对象的运行时类型的使用。



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

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

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