加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

分配给Java中更广泛类型的不同实现之间的差异

发布时间:2020-12-15 02:08:39 所属栏目:Java 来源:网络整理
导读:我知道将子类实现分配给Interface类型的变量是最佳实践,以保持灵活性,如下所示: ListInteger list = new ArrayListInteger(); 我目前的理解是,当将列表声明为类型List时,将其功能限制为仅列出List所需的方法的实现,并且不允许特定于实现的方法.那说,有什么
我知道将子类实现分配给Interface类型的变量是最佳实践,以保持灵活性,如下所示:

List<Integer> list = new ArrayList<Integer>();

我目前的理解是,当将列表声明为类型List时,将其功能限制为仅列出List所需的方法的实现,并且不允许特定于实现的方法.那说,有什么区别:

List<Integer> list = new ArrayList<Integer>();

和:

List<Integer> list = new LinkedList<Integer>();

除了由List接口的每个类的不同实现引起的一些明显的性能差异之外,是否有任何差异?

作为另一个例子,使用Set,我知道这样做:

Set<String> set = new HashSet<String>();

给你一个HashSet作为Set,而:

Set<String> set = new TreeSet<String>();

给你一个TreeSet作为一个集合,这意味着(除其他外),该集合是自动排序的.但是不是自动排序类的特定于实现的函数吗?

解决方法

正如评论中已正确陈述的那样,如果您通过其接口声明变量,则只能访问该接口定义的方法.具体类型之间的主要区别在于实现的性能.

但是也可以选择性地实现界面中定义的某些方法.例如,如果实现Set接口的具体类型不支持add操作,则java.util.Set接口的方法add抛出UnsupportedOperationException.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读