日期:2014-05-20  浏览次数:20792 次

关于Java中向上转型的问题
我在网上看的一个java教学视频,是关于HashMap的,里面涉及到向上转型的问题,我把代码修改了,代码如下:
HashMap<String,String> hashMap = new HashMap <String,String>();
//Map<String,String> map = hashMap;


hashMap.put("1","abcd");
hashMap.put("2","ef");
hashMap.put("3","ghm");
hashMap.put("4","Dalian");

int size=hashMap.size();
System.out.println("the size of map is-->"+size);
String str=new String();
str=hashMap.get("4");
System.out.println(str);
hashMap.put("4","Wuhan");
str=hashMap.get("4");
System.out.println(str);
这个是能正常编译运行的,并且和原来结果一样。

原来的程序中,有Map<String,String> map = hashMap;这一句,
并且,下面的对象都是用map,
我不明白为什么要加这一句,直接用hashMap调用方法不就可以了吗?
Java 转型 HashMap String

------解决方案--------------------
比如写一个方法,参数要求传递List类型,你就可以用List list = new ArrayList()中的list传递,但是你写成ArrayList list = new ArrayList()是传递不进去的。尽管方法处理时都一样。另外,方法还可以根据你传递的不同list(ArrayList或者LinkList)进行不同处理。
------解决方案--------------------
上面的两句其实就是这一句  Map<String,String> map = new HashMap <String,String>();
父类的引用指向子类的对象  这个是为你后面学多态做铺垫的  我当初也是这样的   你见多了就好了  当然你后面理解了多态就懂了 这样写的好处   
------解决方案--------------------
多态方式声明是一种好的习惯。当我们创建的类,使用时,只用到它的超类或接口定义的方法时,我们可以将其索引声明为它的超类或接口类型。

它的好处是,如果某天我们对这个接口方法的实现方式变了,对这个接口又有一个新的实现类,我们的程序也需要使用最新的实现方式,此时只要将对象实现修改一下,索引无需变化。

比如Map<String,String> map = new HashMap <String,String>();想换成HashTable实现,可以Map<String,String> map = new HashTable <String,String>();

这种小范围的使用可能体现的用处不明显。

当我们使用Spring,或者设计数据库连接使用时,可能会明显些。

我们可能会随着业务发展,数据库的实现从mySql改为Oracle等。如果我们设计的时候,将数据库驱动的索引直接定义为mySql特定的驱动时,切换Oracle就要修改源码了。如果定义为接口的方式,如Dirver等,此时的切换,只要修改配置文件数据库驱动即可,源码中对数据库的各种操作都无需修改。

------解决方案--------------------
子代父类实例化,然后就相当于一个父亲有很多儿子,送快递的给这个父亲的儿子送东西,他只需要送到父亲的家就行了,至于具体是那个儿子的,父亲还会分不清自己的儿子么,所以你就不用操心了。
------解决方案--------------------
父类类型,指向子类对象
或者接口类型,指向实现类对象,
都是为了实现代码更容易修改,更容易维护,多态
------解决方案--------------------
那个讲的是多态,那样写,那么在以后要改实现方式的时候就更容易了,假如要改成TreeMap