栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 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号