0

我知道在 C++ 中没有虚拟模板函数这样的东西。这是因为我们需要在编译时知道 VTBL 的条目,并且每种模板类型都是单独编译的。

然而,在 Java 中,我知道泛型类型只编译一次,这可以启用泛型类的覆盖方法。这是真的?

如果是这样,这种设计选择是否使?

4

2 回答 2

4

Java 没有模板类。相反,它具有泛型,它们是常规 Java 类,在编译时具有额外的类型信息,允许编译器执行类型安全检查。完成这些检查后,有关泛型类型的信息将被“擦除”,并且编译后的类看起来像任何其他类。

于 2013-10-14T22:52:31.393 回答
1

任何非最终的、非私有的、非静态的方法都可以在子类中被覆盖,无论它是否是泛型的。之所以可行,是因为该类型实际上在每种情况下都是一个引用。更改类型时,您只是更改了引用的类型。

顺便说一句,所有非静态方法在 Java 中都是“虚拟的”。

于 2013-10-14T22:53:15.310 回答