大家好!
刚开始学习Java并且无法理解,例如:
Set<Integer> intset = new HashSet<Integer>(); (1)
HashSet<Integer> intset2 = new HashSet<Integer>(); (2)
这些例子之间有什么区别?或者他们是一样的? (1)示例看起来像向上转换,这意味着我们只有HashSet
只有Set(接口)方法?谢谢你的回复!
答案 0 :(得分:4)
写作时
Set intset = new HashSet();
您保证以下代码(如果不是强制转换)不会使用HashSet
类的任何特性。这意味着未来的实现可能会将HashSet
替换为Set
的任何其他实现,或者可能从其他地方接收它。这实际上是最佳做法,因为这意味着您的代码不会coupled。
答案 1 :(得分:2)
Set
是一个接口,HashSet
是Set
接口的哈希实现。
inset
是Set
,因此,它可以引用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接口