当前位置: 首页 > 知识库问答 >
问题:

使用指向派生对象的基引用调用的重写方法,运行时将调用什么?

卢才艺
2023-03-14

问题:当使用引用派生对象的基引用调用重写方法时,在运行时调用该方法的哪个版本?

我认为这将是被覆盖的方法,因为它仅通过对派生对象的引用来调用;正确?

共有2个答案

慕容俭
2023-03-14

是的,将调用派生对象方法。使用以下示例进行体验。

public class Main {
  public static void main(String[] args) {
        B b = new B();
        print(b);
    }

    public static void print(A a) {
        System.out.println(a.run());
    }
}

class A{
    public String run () {
       return "A";
    }
}

class B extends A{
    public String run () {
        return "B";
    }
}
严烨
2023-03-14

是的,将调用派生对象的方法。

 类似资料:
  • 问题内容: 请参考下面的Java代码: 看到的输出是: 我认为发生var = 0是因为派生对象已初始化一半;类似于乔恩·斯基特在这里说的话 我的问题是: 如果尚未创建Derived类对象,为什么要调用重写的方法? var在什么时间点分配值为0? 是否有任何需要这种行为的用例? 问题答案: 该对象 已 被创建-它只是在构造函数尚未运行。对象的类型在创建后即刻就不会在Java中更改,这发生在所有构造函

  • 问题内容: 我有以下代码片段: 执行代码时出现异常: 我不明白为什么会有和例外。有人可以帮助我理解吗? 您可以在此处检查代码。 问题答案: 创建一个对象,这意味着首先调用其超类构造函数,然后依次调用-但您已覆盖它,因此它是该方法的子版本。在该方法中,您调用尚未初始化的。 结论:在构造函数中调用可重写方法几乎从来不是一个好主意。

  • 我用java编写Rational类来做基本的数学运算,我想覆盖Number类和Comparable接口的方法。我这样做是为了双倍的价值 正如我们所知,BigInteger类也扩展了数字类,所以我对在doubleValue中调用哪个方法感到困惑,因为我已经覆盖了doubleValue

  • 问题内容: 我在调用 非静态 方法时感到困惑 我知道 method-1 和 method-2 都将调用 doThis() ,但是功能上有什么区别吗? 问题答案: 功能上有区别吗? 两者的行为方式相同。 第二个选项不允许您再次重用该实例。在单行return语句中可能很方便和简洁(例如,请考虑使用构建器模式,其中每个构造方法都将返回一个半初始化的实例): 或者创建一个对象仅执行一次定义的操作。 方法2

  • 问题内容: 我有两个Java类:B,它扩展了另一个类A,如下所示: 我想打电话给。我来自C++界,我不知道如何用Java做这个基本的事情。 问题答案: 您要寻找的关键字是。例如,请参阅本指南。

  • 本文向大家介绍使用对象封装ajax重复调用的方法,包括了使用对象封装ajax重复调用的方法的使用技巧和注意事项,需要的朋友参考一下 在项目中经常用到AJAX调用远程数据,每一次调用,都得写一个ajax方法,这就造成了重复代码过多,可读性也不够强,所以,我一般都是封装起来,需要的时候调用。 以上所示是本文给大家分享使用对象封装ajax重复调用的方法,希望对大家有所帮助。