黑马程序员技术交流社区

标题: 关于Java中向上转型的问题 [打印本页]

作者: 雷丹    时间: 2013-10-24 16:11
标题: 关于Java中向上转型的问题
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调用方法不就可以了吗?
作者: 麦者    时间: 2013-10-24 17:11
两种方法都是可以的,体现出java的多态,就是通过指向父类、接口的指针,来调用在不同子类中实现的方法。
作者: Stephen_Chow    时间: 2013-10-24 20:43
当然是可以的,一般学习方法是先学习顶层父类或借口的方法,因为他们有往上抽取的共性的方法。
所以老师的视屏里都是这么来的,Map借口不能new对象,故就找其子类来实现多态的运用。



作者: 1961993790    时间: 2013-10-25 08:35
Map<String,String> map = new HashMap <String,String>();
父类的引用指向子类的对象它是多态方式声明是一种好的习惯。
当我们创建的类,使用时,只用到它的超类或接口定义的方法时,我们可以将其索引声明为它的超类或接口类型。
它的好处是,如果某天我们对这个接口方法的实现方式变了,对这个接口又有一个新的实现类,我们的程序也需要使用最新的实现方式,
此时只要将对象实现修改一下,索引无需变化。希望对您有帮助!
作者: To    时间: 2013-10-27 16:06
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2