关于创建新的对象的疑问

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,这里不要想复杂,结合下图的举例来简单理解哦:

http://img1.sycdn.imooc.com//climg/5ed716be0960e98804510236.jpg

一开始我们使用Set hashSet = new HashSet(); 来添加字符串,也许哪一天需要换成其它的实现类呢?这时这个方法的返回类型Set就不需要改了,只需要将HashSet更改为TreeSet就可以了。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


好帮手慕小脸 2020-06-02 19:01:48

你好,Set set  = new HashSet();这句创建了一个HashSet的对象后把上溯到了Set。此时它是一个Set引用了,有些HashSet有但是Set没有的属性和方法,它就不能再用了。

而HashSet hs=new HashSet();创建一对象则保留了HashSet的所有属性。Set有多个实现类,例如修改为LinkedSet等时,这个方法的返回类型就不需要改了,并且调用这个方法的所有类都不需要修改

假设开始用 HashSet set= new HashSet(), 修改的地方就多了,特别是如果使用了HashSet特有的方法和属性。如果没有特别需求的话,最好使用Set set= new HashSet(); 便于程序代码的重构. 这就是面向接口编程的好处。

祝学习愉快~


  • 提问者 被抱的树 #1
    老师可以举个简单例子吗?就是Set set=new HashSet(),然后需要将 set 指向其它类型。
    2020-06-02 19:17:19
  • 好帮手慕小脸 回复 提问者 被抱的树 #2
    同学你好,例如:Set set=new LinkedHashSet();或Set ts = new TreeSet(); 祝学习愉快~
    2020-06-03 10:03:26
  • 提问者 被抱的树 回复 好帮手慕小脸 #3
    “Set有多个实现类,当修改为LinkedSet等时,这个方法的返回类型就不需要改了,并且调用这个方法的所有类都不需要修改”老师说的这句话我还是不能get到点,哭了~~~
    2020-06-03 10:44:54
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师