Virtual Function in Java

2025年3月29日 | 阅读 4 分钟

在面向对象编程语言中,虚拟函数或虚拟方法是用于在具有相同签名的继承类中重写函数行为以实现多态性的函数或方法。

当程序员将技术从 C++ 切换到 Java 时,他们会考虑 Java 中的虚拟函数在哪里。在 C++ 中,虚拟函数使用 virtual 关键字定义,但在 Java 中,它通过不同的技术实现。请参阅 C++ 中的虚拟函数

Java 是一种面向对象编程语言;它支持多态性、抽象、继承 等 OOP 特性。这些概念基于对象、类和成员函数。

默认情况下,Java 中的所有实例方法都被视为虚拟函数,但 final、static 和 private 方法除外,因为这些方法可以用于实现多态性。

如何在 Java 中使用虚拟函数

Java 中不使用 virtual 关键字来定义虚拟函数,而是通过以下技术来实现虚拟函数和方法:

  • 我们可以使用继承类函数以相同的函数名来重写虚拟函数。通常,虚拟函数在父类中定义,并在继承类中重写。
  • 虚拟函数应该在派生类中定义。我们可以通过基类的引用或指针来引用派生类对象来调用它。
  • 虚拟函数在基类和派生类中应具有相同的名称和参数。
  • 对于虚拟函数,IS-A 关系是必需的,它用于在继承中定义类层次结构。
  • 虚拟函数不能是私有的,因为私有函数不能被重写。
  • 虚拟函数或方法也不能是 final,因为 final 方法也不能被重写。
  • 静态函数也不能被重写;因此,虚拟函数不应该是静态的。
  • 默认情况下,Java 中每个非静态方法都是虚拟函数。
  • 虚拟函数可用于实现运行时多态等 OOP 概念。
总之,可用于实现多态性的方法或函数就是 Java 中的虚拟函数或方法。

让我们通过一些例子来理解它

Parent.Java

Child.java

输出

Inside the Child Class

从上面的例子中,我们通过在 Child 类中重写 v1() 函数,将其用作虚拟函数。

在 Java 中,每个非静态、非 final、公共方法都是虚拟函数。这些方法可用于实现多态性。不能用于实现多态性的方法永远不是虚拟函数。

静态、final 和私有方法永远不是虚拟函数。我们不能通过对象名或类名调用静态方法。即使我们尝试,它也无法实现多态性。

Java 接口作为虚拟函数

Java 中的接口是类的蓝图;它包含静态常量和抽象方法。所有 Java 接口都被视为虚拟函数,因为它们依赖于实现类来提供方法实现。

请看下面的例子来理解接口的行为

输出

BMW X7

从上面的例子中,我们可以看到接口的方法是通过实现类 BMW 执行的。

因此,我们也可以通过接口实现多态性。

纯虚拟函数

没有实现要求的虚拟函数被认为是纯虚拟函数。例如,Java 中的抽象方法是纯虚拟函数。请看下面的例子

输出

MyPet is so sweet

从上面的例子中,jump() 方法是一个纯虚拟函数。

运行时多态

运行时多态性是一种在运行时而不是编译时解析对重写方法的调用的过程。

在运行时多态性中,我们将使用引用变量来调用方法,而不是值。

虚拟函数可用于实现运行时多态性。

请看下面的例子,了解虚拟函数如何用于实现运行时多态性

输出

Best Java Training Institute

从上面的例子中,我们使用虚拟函数实现了运行时多态性。

总结

以下是关于 Java 中虚拟函数的一些注意事项:

  • 虚拟函数在 Java 中是一个普通的函数。
  • 我们不需要声明任何显式描述来定义虚拟函数。
  • 在 Java 中,没有 virtual 关键字用于定义虚拟函数。
  • 父类指针用于引用子类对象
  • 虚拟函数应在子类中定义,名称与父类中的相同。
  • Java 中所有非静态方法都被视为虚拟函数,但 final、static 和 private 方法除外。