定义对象问题

bean 2011-01-28 10:25:18
Map<String,String> map1=new HashMap<String,String>();
HashMap<String,String> map2=new HashMap<String,String>();


2者有什么区别?哪种定义更好?
...全文
208 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
bb6230383 2011-01-29
  • 打赏
  • 举报
回复

有区别
hashmap 实现了 map
liuzhongchao 2011-01-29
  • 打赏
  • 举报
回复
第一种更灵活,用到了多态。
opmic 2011-01-29
  • 打赏
  • 举报
回复
面向接口编程
java131313 2011-01-29
  • 打赏
  • 举报
回复
这是父类的引用指向子类,可以实现多态。第一种好
chosen0ne 2011-01-29
  • 打赏
  • 举报
回复
这就是利用多肽,实现面向接口编程。变量的类型使用父类,然后指向子类,这样的话,如果实现变了,比如后来实现更改了,编程map的另一个子类LinkedHashMap,只在声明处更改即可。

Map<String,String> map1=new LinkedHashMap<String,String>();


当然这通过依赖注入来实现是最好的方式
dracularking 2011-01-28
  • 打赏
  • 举报
回复
肯定有区别

1.灵活性 定义为Map之后更灵活 今后才有可能在需要的时候替换为HashMap之外的其它实现如TreeMap等,同时如Joshua Bloch等大师也倡导面向接口编程 code to interfaces
2.有得必有失,第一种的tradeoff就是无法调用HashMap特有的方法,也就是存在于Map接口中所定义的方法之外的HashMap自己的方法,当然同时也是HashMap未override的方法
匠心零度 2011-01-28
  • 打赏
  • 举报
回复
没什么区别,都是HashMap
ilrxx 2011-01-28
  • 打赏
  • 举报
回复
第一种好些
java倡导面向接口编程,集合很多都是定义一个父接口,然后不同的子类去实现它,这种做法的好处是便于以后的扩展,耦合性要低。
当然只针对lz提出的这个问题,是没什么区别,都是hashmap,hashmap本身已经实现了map接口,关键点是如果以后自己设计应用的时候,可不可以这样做,像jdk的代码设计一样,更灵活。
24K純帥 2011-01-28
  • 打赏
  • 举报
回复
没什么区别,都是HashMap
lblml 2011-01-28
  • 打赏
  • 举报
回复
通俗点讲,等号后面创建了一个对象,前面是给对象起了个名字,是叫他的大名,还是小名,这个随你的便,都代表他。
区别就是,一个是父类型的名,一个是子类型的名。父类型的名不能调用子类独有的方法,只能调用父子共有的方法。继承关系搞清楚了,就明白了。
工作中父代表子的时候较多,牵扯到接口开发的问题,和重用的问题。
chushengguanliyuan 2011-01-28
  • 打赏
  • 举报
回复
小程序无所谓

大点的项目该用第一种,除非你要用到HashMap中独有的方法
keeya0416 2011-01-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 lastyang 的回复:]
Java code
Map<String,String> map1=new HashMap<String,String>();
HashMap<String,String> map2=new HashMap<String,String>();


2者有什么区别?哪种定义更好?
[/Quote]
一般来说 第一种好些
很多时候需要用到多态
keeya0416 2011-01-28
  • 打赏
  • 举报
回复
没区别
用父类引用子类的实例都是允许的
焙焙龙 2011-01-28
  • 打赏
  • 举报
回复

人 张三 = new 男人()

的问题,new出来的的确是男人,但是别人去用的时候,只能当人去用,虽然你真的是男人!
那么张三能干的事,也仅仅是人能干的,而男人超越人的行为,是无法直接调用的,除非,你给强制转化下,但万一张三是女人呢?
你当然知道张三肯定是男人,但是别人,未必知道!
zzt369880281 2011-01-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dracularking 的回复:]

肯定有区别

1.灵活性 定义为Map之后更灵活 今后才有可能在需要的时候替换为HashMap之外的其它实现如TreeMap等,同时如Joshua Bloch等大师也倡导面向接口编程 code to interfaces
2.有得必有失,第一种的tradeoff就是无法调用HashMap特有的方法,也就是存在于Map接口中所定义的方法之外的HashMap自己的方法,当然同时也是HashMa……
[/Quote]
第一种的tradeoff就是无法调用HashMap特有的方法

是吗?应该可以调用HashMap的特有方法吧
lanjingling539 2011-01-28
  • 打赏
  • 举报
回复
Map<String,String> map1=new HashMap<String,String>();
这是父类的引用指向子类,是多态;java倡导面向接口编程,集合很多都是定义一个父接口,然后不同的子类去实现它,这种做法的好处是便于以后的扩展,耦合性要低。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧