当前位置: 首页 > 面试题库 >

Java虚拟方法调用有什么用?

屈翰飞
2023-03-14
问题内容

我了解什么是Java方法调用,并使用它练习了很多示例。

我想知道这个概念的实际情况或需要。如果有人能给出使用它的真实场景,这将有很大帮助,如果没有这个概念,将会发生什么?


问题答案:

这是一个例子。假设我们有2个类别:

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

class B extends A {
    public String getName() {
        return "B";
    }
}

如果我们现在执行以下操作:

public static void main(String[] args) {
    A myA = new B();
    System.out.println(myA.getName());
}

我们得到结果

B

如果Java没有virtual methodinvocation,它将在编译时确定getName()要调用的是属于A该类的。既然不是,而是在运行时根据所myA指向的实际类来确定,则可以得到以上结果。

[编辑以添加(略有捏造)示例]
您可以使用此功能编写一个方法,该方法将任意数量的Objects作为参数并按如下所示打印它们:

public void printObjects(Object... objects) {
  for (Object o: objects) {
    System.out.println(o.toString());
  }
}

这将适用于任何对象混合。如果Java没有virtual method invocation,则所有对象都将使用toString()不太可读的对象打印。现在,toString()将使用每个实际类的,这意味着打印输出通常更具可读性。



 类似资料:
  • 问题内容: 我已经在某些计算机科学测试中看到了下一段,希望我能在这里对它的含义有一个很好的解释,因为我用它搜索了一个小时,却找不到任何东西。 “当我们说Java语言具有 虚拟方法调用时 ,是指在Java应用程序中,执行的方法由运行时的对象类型决定” 这是什么意思?谁能更好地解释它? 问题答案: 这些行的作者使用的C ++术语。 更好的术语是动态绑定/动态调度。 这意味着,对象的动态类型是“选择”将

  • 问题内容: 我正在尝试获取一些信息,但我的应用程序崩溃并显示以下消息: 这是代码: 这是一个纯课。的哪个调用不包含this 。我做错了吗?应始终位于内吗? 根据要求整体: 问题答案: 改成 您为布局充气。视图属于膨胀的布局。因此,使用view对象在中初始化视图 片段由活动主持 您可以在视图中使用和初始化 还在中初始化TextView 。由于Asynctask是一个内部类,因此您可以在那里更新ui

  • 问题内容: 在继承中虚拟函数如何在后台工作?编译器是否特别对待虚拟函数? 问题答案: 是的,编译器和运行时对虚拟方法的处理方式有所不同。JVM专门利用虚拟方法表进行虚拟方法分配: 对象的调度表将包含对象的动态绑定方法的地址。通过从对象的分派表中获取方法的地址来执行方法调用。属于同一类的所有对象的分发表都是相同的,因此通常在它们之间共享。属于类型兼容类的对象(例如,继承层次结构中的同级对象)将具有具

  • 所以,基本上我创建了一个包装器类,它创建了一个简单的OpenGL应用程序。我的想法是在准备好的时候有这样的东西: 所以,基本上这个类使用GLFW封装了一个简单的OpenGL窗口。这个想法是,当你想要创建一个新的应用程序时,你只需要从应用程序类(我正在写的)派生你的类。使用这个新类,您只需重写虚拟方法(main Loop、初始化和回调),您将拥有一个工作应用程序。 下面是基类: 所以我所做的是将在派

  • 当我运行我的应用程序时,我有一个异常显示,所以我想帮助我:)异常是:java。lang.NullPointerException:尝试调用虚拟方法“int java”。lang.String。空对象引用上的长度() 当我单击Login类中的dd1按钮和按钮实现(public void getData(View v))方法时,会显示异常 非常感谢。 登录类 HttpManager类 日志:

  • 问题内容: Process: com.example.vicevirus.myapplication, PID: 13471 java.lang.NullPointerException: Attempt to invoke virtual method ‘java.lang.String com.google.firebase.auth.FirebaseUser.getUid()’ on a n