【发布时间】:2009-05-07 19:56:51
【问题描述】:
在 C++ 中,我必须明确指定“virtual”关键字才能使成员函数“可覆盖”,因为当成员函数可覆盖时,会产生创建虚拟表和 vpointer 的开销(因此每个成员函数都是隐式的出于性能原因不可覆盖)。
当子类提供具有相同名称和签名的单独实现时,它还允许隐藏成员函数(如果未覆盖)。
在 C# 中也使用了相同的技术。我想知道为什么 Java 放弃了这种行为,并在默认情况下使每个方法都可覆盖,并提供了在显式使用“final”关键字时禁用覆盖行为的能力。
【问题讨论】:
标签: java c++ virtual-functions