【问题标题】:What is the difference [duplicate]有什么区别[重复]
【发布时间】:2014-11-08 18:37:43
【问题描述】:

大家!

刚开始学Java,一时看不懂,例如:

Set<Integer> intset = new HashSet<Integer>();  (1)

HashSet<Integer> intset2 = new HashSet<Integer>(); (2)

这些例子有什么区别?或者他们是一样的? (1) 示例看起来像向上转换,所以这意味着我们有 HashSet 只有 Set(interface) 方法?感谢您的回复!

【问题讨论】:

  • 我不确定是否重复...存在“有什么区别”和“为什么更喜欢使用界面”的问题。它们是两个截然不同的问题,除了谈论同一个主题之外,它们甚至不相互重叠。

标签: java collections


【解决方案1】:

当你写作时

Set intset = new HashSet();

您保证以下代码(如果不强制转换)不会使用 HashSet 类的任何特性。这意味着未来的实现可能会用Set 的任何其他实现替换HashSet,或者可能从其他地方接收它。这实际上是一个最佳实践,因为这意味着您的代码更少 coupled

【讨论】:

    【解决方案2】:

    Set 是一个接口,HashSetSet 接口的哈希实现。

    insetSet,因此,它可以引用Set 的任何实现,例如HashSet。另一方面,inset2 只能引用 HashSet 对象。

    【讨论】:

      【解决方案3】:

      Set[Set][1]是一个接口,HashSet[HashSet][2]是一个类,在HashSet类中实现Set接口方法,HashSet类实现Set接口

      【讨论】:

        【解决方案4】:

        这是多态性。

        这些例子有什么区别?

        示例创建了一个“指针”,指向一个 Set 类型的内存空间。这意味着您将能够使用 Set 接口中声明的所有方法来操作内存中的该空间。

        示例二创建了一个“指针”,指向一个HashSet类型的内存空间。这意味着您将能够使用 HashSet 类中声明的所有方法来操作内存中的该空间。

        或者它们是一样的?

        这取决于你在这两行之后要做什么。 Set 是 Set-like 集合的常见契约,但有时我们需要更具体的方法。那就是您需要将 Object 向下转换为更具体的类型的时候。接口应该处理通用性。

        (1) 示例看起来像是向上转换,所以这意味着我们有只有 Set(interface) 方法的 HashSet?

        是的。

        【讨论】:

          猜你喜欢
          • 2017-02-17
          • 2011-09-27
          • 2013-04-22
          • 2012-03-29
          • 1970-01-01
          • 1970-01-01
          • 2013-10-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多