C++ 和 JAVA 的默认虚行为

2024 年 8 月 28 日 | 3 分钟阅读

在 C++ 中,类成员方法默认是非虚拟的。这意味着可以通过指定它使它们成为虚拟的。

另一方面,Java 中的方法默认是虚拟的,可以通过使用“final”关键字使其成为非虚拟的。

让我们看看 C++ 和 Java 中方法的默认虚拟行为有何不同。记住在 C++ 编程语言中,类成员方法默认是非虚拟的,这一点至关重要。通过使用 virtual 关键字,它们可以成为虚拟的。例如,在下面的程序中,Base::show() 不是虚拟的,程序会打印“Base::show() called.”。

C++

输出

编译错误

Base :: show() called

输出解释:在 Base::show() 的定义前添加 virtual 会使程序打印“Derived::show() called.”。Java 中的方法默认是虚拟的,但可以通过使用 final 关键字使其成为非虚拟的。例如,在下面的 Java 程序中,show() 默认是虚拟的,程序会打印“Derived::show() called.”。

让我们看看如果我们在 Java 编程语言中使用相同的概念会发生什么,如下例所示。

JAVA

输出

Derived :: show() called

请注意,与非虚拟的 C++ 行为不同,如果我们在 Base 中 show() 的定义前添加 final,上面的程序将无法编译。