有什么不同

时间:2014-09-15 09:16:35

标签: java collections

大家好!

刚开始学习Java并且无法理解,例如:

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

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

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

4 个答案:

答案 0 :(得分:4)

写作时

Set intset = new HashSet();

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

这是多态性。

  

这些例子之间有什么区别?

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

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

  

或者他们是一样的?

这取决于你在这两行之后要做什么。 Set是类似Set的集合的常见契约,但有时我们需要更具体的方法。那时你需要将对象转发为更具体的类型。接口应该处理共性。

  

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

答案 3 :(得分:0)

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

相关问题