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

重载和重写方法中的多态

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

重载和重写方法中的多态

我希望编译器从Animal类引用而不是Horse对象引用中调用eat()方法。

让我们先更正此语句。变量

ah
是类型的引用,
Animal
并且该语句
newHorse()
创建类型的实例
Horse
并将其分配给
Animal
引用。

现在,术语已经很清楚了,这种行为是可以预期的,并被称为运行类型多态或动态方法分派。在编译时,

eat()
将基于的引用类型进行解析
Animal
,但是在运行时,将被调用的方法基于
实例 类型来进行解析
Horse
。

当我有一个引用对象类型的泛型引用变量类型时,如何确定编译器将要调用哪种方法?

您可以按照以下简单步骤操作:

  1. 检查被调用的方法。
    ah.eat()
    正在调用方法
    eat
    。
  2. 查看父类和子类中是否都存在签名完全相同的方法(例外是返回类型协方差)。(是否已覆盖方法?)
  3. 检查参考类型。在中
    Animal ah = new Horse()
    ,引用类型是
    Animal
    父类
  4. 检查实例类型。在中
    Animal ah = new Horse()
    ,实例类型是
    Horse
    子类。

如果满足上述所有条件,则您正在查看运行类型多态性,并且将从子类中调用该方法。在任何其他情况下,将基于引用类型解析要调用的方法。

还需要了解子类从其父类继承方法。假设您

public void eat()
从
Horse
类中删除了该方法,那么您将不再 覆盖
该
eat()
方法;然而,
public void eat(String s)
在方法
Horse
仍称 重载
继承
eat
的方法
Animal
。接下来,让我们在中添加一个
public void eat(Strings)
方法
Animal
。有了这个此外,你现在 超载 的
eat
在方法
Animal
和 Overrding
在它
Horse
的类。无论您如何更改代码,上面提到的4个步骤都将始终帮助您确定将调用哪种方法。



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

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

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