<分区>
假设我想制作一个 HashMap
成绩。
Map<String,Integer> grades = new HashMap<String,Integer>();
grades.put("John", 87); // this work due to auto-boxing right?
grades.put("Luke", Integer(85)); // non-autoboxed, is this redundant?
为什么 map 在左边,HashMap<K, V>( );
在右侧?每当创建对象时都需要类型一致性,这不是一条规则吗?除非名称的静态类型是 Map 而动态类型是 HashMap
,大概是 Map
的子类.但是你为什么要这样做呢?方法调用是从对象静态类型(例如 Map
s)的角度调用的,但如果动态类型中有重写的方法,则会调用这些方法。这就是类型不同的原因吗?
谢谢!新手问题,但这些东西可能会令人困惑......
编辑:
谢谢!所以一般的格式是:Interface varName = new ImplementedClassConstructor(); ?而且我们经常选择父类(super class)接口(interface),因为它允许以后更容易替换(例如,如果我想将 HashMap 更改为 TreeMap?