论目的:java泛型 vs 模板 vs 模板泛化 vs 重载
- 所以用了泛型的话那么这个代码的结构是不会改变的,只是中间数据类型发生了变化,为了类型检查和之后不需要类型转化,那么就引入了泛型的机制。
- 重载就不是这样了,而是根据传入数据类型,个数,顺序的不同,而使用完全不同的处理办法。泛型是为了传入不同类型的参数也要执行相同的运行的方法。但是不需要类型转换
- c++模板就是也是为了传入不同的代码也要用相同的代码进行处理,并且不会再运行阶段进行类型擦出
- 对于普通方法的重载就是重载,对于模板方法的重载就是模板的特化
- 保证容器的通用性(谁都可以装进去)→使用多态→需要向上和向下转型→装入不同的对象时下转型容易出错→定义泛型
论目的:重载 vs 模板/泛型
- 重载:传入不同的参数类型,个数或顺序。利用不同的代码进行处理。
- 模板:为了传入不同的参数类型采用相同的代码逻辑去处理。本来用Object也可以实现这个功能但是,范型就多了类型检查,帮我们检查类型是否正确。
论java和c++中的多态:
在c++里一般分为两种:
- 第一种是运行时的多态,也就是虚函数体现的多态。运行时的多态指的是根据传入的子类不同,可以调用不同的方法。
- 另一种是编译时的多态,也就是模版编程的多态,体现在参数的多态。编译时的多态指的是一个函数可以传入不同类型的参数。
- 多态+泛型:就可以实现编译时可以传入不同的类型,运行时可以实现运行具体对象的方法。
- 在作用上是为了提高编程效率,其实用其他技术也能达到同样的效果
在java中多态仅仅只再运行时的动态绑定:
- c++的模板就是参数类型的参数化,这个再Java中需要泛型配合反射才可以做到
- 而且在c++中函数默认为是静态绑定,java中方法默认为是动态绑定的。所以c++中利用虚函数才可以实现多态,java中如果想要不支持多态那么要用static