我知道在C ++中没有虚拟模板功能。这是因为我们需要在编译时知道VTBL的条目,并且每个模板类型都是单独编译的。
在Java中我知道泛型类型只编译一次,可以启用泛型类的重写方法。这是真的吗?
如果是这样,这个设计选择会吗?
答案 0 :(得分:4)
Java没有模板类。相反,它有Generics,它是常规Java类,在编译时具有额外的类型信息,允许编译器执行类型安全检查。完成这些检查后,有关泛型类型的信息将被“擦除”,编译后的类看起来就像任何其他类一样。
答案 1 :(得分:1)
任何非final,非私有,非静态方法都可以在子类中重写,无论它是否是泛型的。这项工作是因为在每种情况下,类型实际上都是引用。当您更改类型时,您只是更改引用的类型。
BTW所有非静态方法都是Java中的“虚拟”。